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

时间:2017-04-24 14:46:22

标签: python path file-exists

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

E.g。我有一个包含以下文件的repo: LIST.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区分两种类型的字符串。有谁知道,它来自哪里?

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

考虑

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))

答案 2 :(得分:0)

两个可能的问题。

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

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

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