Python使用os.listdir遍历目录打开文件报FileNotFoundError如何解决?
问题根因
os.listdir(path) 仅返回目标目录下的纯文件名,不会携带父级路径。你直接把文件名传给open()函数时,Python会默认在脚本运行的当前工作目录(也就是test.py所在的myapp/目录)查找文件,而你的txt文件实际存放在myapp/myfiles/子目录下,自然找不到对应文件。
修复方案
方案1:拼接完整文件路径(兼容全Python版本,适配现有代码逻辑)
修改循环内的打开逻辑,把目录路径和文件名拼接成完整路径后再操作:
import os, sys # Open a file path = "C:/Users/mypc/Myapp/myapp/myfiles" dirs = os.listdir( path ) for file in dirs: # 拼接完整路径,避免路径分隔符适配问题 full_file_path = os.path.join(path, file) # 可选:过滤只处理txt文件,避免目录下有子文件夹时报错 if not file.endswith('.txt'): continue with open(full_file_path, 'rb') as _fp: fileData = _fp.read() print("FILE DATA (%s):\n\n%s\n\n"%(_fp.name, fileData))
方案2:使用pathlib(Python 3.4+ 更简洁的路径处理方式)
如果你的Python版本支持,用pathlib写代码更简洁,也能避免手动拼接路径的常见错误:
from pathlib import Path path = Path("C:/Users/mypc/Myapp/myapp/myfiles") for file in path.iterdir(): # 只处理txt格式的普通文件 if file.is_file() and file.suffix == '.txt': with open(file, 'rb') as _fp: fileData = _fp.read() print(f"FILE DATA ({_fp.name}):\n\n{fileData}\n\n")
内容的提问来源于stack exchange,提问作者Si2sa
相关产品推荐
相关产品推荐

