提问人:Aarushi Mishra 提问时间:3/2/2015 最后编辑:SuperStormerAarushi Mishra 更新时间:9/10/2022 访问量:53268
Python 为 os.listdir [duplicate] 返回的文件名引发 FileNotFoundError
Python raising FileNotFoundError for file name returned by os.listdir [duplicate]
问:
我试图遍历如下目录中的文件:
import os
path = r'E:/somedir'
for filename in os.listdir(path):
f = open(filename, 'r')
... # process the file
但是即使文件存在,Python 也会抛出:FileNotFoundError
Traceback (most recent call last):
File "E:/ADMTM/TestT.py", line 6, in <module>
f = open(filename, 'r')
FileNotFoundError: [Errno 2] No such file or directory: 'foo.txt'
那么这里出了什么问题呢?
答:
13赞
Antti Haapala -- Слава Україні
3/2/2015
#1
这是因为 os.listdir
不返回文件的完整路径,只返回文件名部分;也就是说,当打开时需要,因为该文件在当前目录中不存在。'foo.txt'
'E:/somedir/foo.txt'
使用 os.path.join
将目录附加到文件名之前:
path = r'E:/somedir'
for filename in os.listdir(path):
with open(os.path.join(path, filename)) as f:
... # process the file
(另外,您不会关闭文件;块将自动处理它)。with
2赞
Lukas Graf
3/2/2015
#2
os.listdir(directory)
返回 中的文件名列表。因此,除非是您当前的工作目录,否则您需要将这些文件名与实际目录连接起来以获得正确的绝对路径:directory
directory
for filename in os.listdir(path):
filepath = os.path.join(path, filename)
f = open(filepath,'r')
raw = f.read()
# ...
2赞
SuperStormer
9/10/2022
#3
这是使用 pathlib 的替代解决方案。Path.iterdir
,它生成完整的路径,无需连接路径:
from pathlib import Path
path = Path(r'E:/somedir')
for filename in path.iterdir():
with filename.open() as f:
... # process the file
评论