python:如何在(路径)列表上使用 os.path.isfile()? [复制]

Posted

技术标签:

【中文标题】python:如何在(路径)列表上使用 os.path.isfile()? [复制]【英文标题】:python: How to use os.path.isfile() on a list (of paths)? [duplicate] 【发布时间】:2017-09-21 07:41:51 【问题描述】:

我正在使用 linux8。我有一个包含文件的 repo(带有 subrepos),并且我有一个文件名列表(path/to/file/filename.pdf)。我想检查(使用python),如果这些文件都存在,如果不存在,我想知道。所以我尝试阅读列表,使用 for 循环迭代列表条目并使用 os.path.isfile() 的条目。

例如我有一个包含以下文件的仓库: 列表.txt, test1.txt 和 test2.txt。

list.txt 包含文件名(此处:'test1.txt' 'test2.txt')。

os.path.isfile('test1.txt') 

给出一个

True

但是这个 for 循环...

import os

with open('list.txt', 'r') as f:
    pathlist=f.readlines()
for path in pathlist:
    print(os.path.isfile(path))

...给出:

False
False

虽然

type(path)

<type 'str'>

感觉就像python区分了两种类型的字符串。有谁知道,这是从哪里来的?

【问题讨论】:

那种。 Python 区分末尾有换行符的字符串和没有换行符的字符串。尝试在从文件中读取的行上调用 strip() 试试 print(repr(path)) ... readlines 不会去掉换行符,你需要自己做。 pathlist = map(str.strip, pathlist) 将完成这项工作 【参考方案1】:

您可以迭代文件的行并检查每个路径是否存在,如下所示:

import os

with open('list.txt', 'r') as fd:
    for line in fd:
        path = line.strip()  # drop \n
        if os.path.isfile(path):
            print(path)

【讨论】:

效果也不错。谢谢!【参考方案2】:

考虑

os.path.isfile("/tmp") # True

同时

os.path.isfile("/tmp\n") # False

试试吧:

with open("/pathlist", "r") as f:
   for path in map(str.strip, f.readlines()):
       print( os.path.isfile(path))

【讨论】:

这个更短。好的。工作正常!谢谢!【参考方案3】:

两个可能的问题。

首先,您可能不在您认为的目录中运行。

其次,readlines() 将返回带有换行符的行,并可能附加回车符。在将它们作为路径进行测试之前,您需要删除它们。您可以使用rstrip() 删除字符串中的尾随空格。

for path in pathlist:
    print(os.path.isfile(path.rstrip()))

【讨论】:

效果很好。我在打印列表“pathlist”时想到了这一点。但是不知道,怎么表达的问题。非常感谢!

以上是关于python:如何在(路径)列表上使用 os.path.isfile()? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

python常用模块-os

python3 根据完整路径获得盘名/路径名/文件名/文件扩展名的方法

python3 根据完整路径获得盘名/路径名/文件名/文件扩展名的方法

python:如何在(路径)列表上使用 os.path.isfile()? [复制]

python 内置模块os 和 sys

Python_osos.pathos.shutil使用案例