python:如何在(路径)列表上使用 os.path.isfile()?
python: How to use os.path.isfile() on a list (of paths)?
我正在使用 linux8。我有一个包含文件的回购协议(带有子回购协议),我有一个文件名列表 (path/to/file/filename.pdf)。我想检查(使用 python),如果这些文件都存在,如果不存在,我想知道。所以我尝试阅读列表,用 for 循环迭代列表条目并使用 os.path.isfile().
例如我有一个包含以下文件的回购协议:
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区分了两种字符串。有谁知道,这是从哪里来的?
两个可能的问题。
首先,您可能 运行 在您认为自己所在的目录中。
其次,readlines()
将 return 带有换行符和可能附加回车符的行 return。在将它们作为路径进行测试之前,您需要删除它们。您可以使用 rstrip()
从字符串中删除尾随空格。
for path in pathlist:
print(os.path.isfile(path.rstrip()))
您可以迭代文件的行并检查每个路径是否存在,如下所示:
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)
考虑
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))
我正在使用 linux8。我有一个包含文件的回购协议(带有子回购协议),我有一个文件名列表 (path/to/file/filename.pdf)。我想检查(使用 python),如果这些文件都存在,如果不存在,我想知道。所以我尝试阅读列表,用 for 循环迭代列表条目并使用 os.path.isfile().
例如我有一个包含以下文件的回购协议: 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区分了两种字符串。有谁知道,这是从哪里来的?
两个可能的问题。
首先,您可能 运行 在您认为自己所在的目录中。
其次,readlines()
将 return 带有换行符和可能附加回车符的行 return。在将它们作为路径进行测试之前,您需要删除它们。您可以使用 rstrip()
从字符串中删除尾随空格。
for path in pathlist:
print(os.path.isfile(path.rstrip()))
您可以迭代文件的行并检查每个路径是否存在,如下所示:
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)
考虑
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))