Python3.10遍历目录文件提示‘文件不存在’问题求助
问题解决:MP3文件找不到的原因及修复方案
核心问题
你代码里的错误很明确:os.listdir(mp3dir)返回的是mp3files目录下的纯文件名(比如a.mp3),但后续判断os.path.exists(mp3_file)时,Python会在当前工作目录(也就是你运行reader.py的目录)查找这个文件,而不是在mp3files子目录里,所以必然找不到。
修复方案
方案1:用os.path.join拼接路径(兼容Python 3.10)
这是最直接的修复方式,把目录和文件名拼接成完整的相对路径,确保Python能定位到正确的文件位置:
import os mp3dir = "mp3files" # 遍历目录下的MP3文件 for mp3_file in os.listdir(mp3dir): # 拼接完整的相对路径 full_path = os.path.join(mp3dir, mp3_file) # 用isfile更准确,避免误判目录 if os.path.isfile(full_path): print(f"{mp3_file} 大小:{os.path.getsize(full_path)} 字节") else: print(f"文件 {mp3_file} 不存在或不是文件。")
方案2:用pathlib(更现代的跨平台路径处理)
Python 3.4+推荐用pathlib,它的面向对象路径处理更直观,天然支持跨平台:
from pathlib import Path mp3dir = Path("mp3files") # 遍历目录下的文件(自动排除子目录) for mp3_file in mp3dir.iterdir(): if mp3_file.is_file(): print(f"{mp3_file.name} 大小:{mp3_file.stat().st_size} 字节") else: print(f"{mp3_file.name} 不是文件。")
额外注意事项
如果你的运行环境工作目录不是mp3reader(比如在上级目录执行python mp3reader/reader.py),上面的相对路径可能还是会出问题。可以通过脚本自身路径来构建绝对路径,彻底解决跨平台和工作目录问题:
- 用
os模块的写法:import os # 获取脚本所在目录的绝对路径 script_dir = os.path.dirname(os.path.abspath(__file__)) mp3dir = os.path.join(script_dir, "mp3files") - 用
pathlib的写法:from pathlib import Path script_dir = Path(__file__).parent mp3dir = script_dir / "mp3files"
内容的提问来源于stack exchange,提问作者lonstar
相关产品推荐
相关产品推荐

