Python运行ex15.py读取同目录ex15_sample.txt报FileNotFoundError
报错核心原因
- Python 内置的
open()函数解析相对路径时,默认参照的是进程当前的工作目录,而非脚本文件本身的存放目录。 - 你执行脚本时的cmd当前路径为
C:\Users\GAMING,传入的文件参数是相对路径ex15_sample.txt,Python 实际会尝试读取C:\Users\GAMING\ex15_sample.txt,但该文件实际存放在C:\MyCodes\PythonCodes\目录下,因此触发文件不存在的报错。
解决方法
- 适配当前运行环境:先将cmd的工作目录切换到脚本与目标文件的共同存放目录,再执行脚本:
cd C:\MyCodes\PythonCodes py ex15.py ex15_sample.txt - 绕开路径解析规则:执行时直接传入目标文件的绝对路径,让Python无需参照当前工作目录即可定位文件:
py C:\MyCodes\PythonCodes\ex15.py C:\MyCodes\PythonCodes\ex15_sample.txt - 永久优化脚本逻辑:修改代码让脚本自动定位自身所在目录,无论从哪个工作路径启动脚本,都能正常读取同目录下的目标文件。修改后的完整可运行代码如下:
from sys import argv import os (script, filename) = argv # 获取脚本文件的绝对路径,推导同目录的基础路径 script_dir = os.path.dirname(os.path.abspath(script)) # 拼接得到目标文件的完整绝对路径 target_path = os.path.join(script_dir, filename) txt = open(target_path) print(f"Here's your file {filename}:") print(txt.read()) print("Type the filename again:") file_again = input("> ") # 对手动输入的文件名做同样的路径拼接,避免后续读取报错 user_target_path = os.path.join(script_dir, file_again) txt_again = open(user_target_path) print(txt_again.read())
内容的提问来源于stack exchange,提问作者Jon
相关产品推荐
相关产品推荐

