Python导入自定义模块后读取模块同目录文件报FileNotFoundError怎么办
问题结论
不存在导入逻辑错误,问题出在文件路径的解析规则配置错误。
原因说明
Python的open()函数使用相对路径时,会基于**执行脚本时的当前工作目录(CWD)**解析路径,而非基于代码所在.py文件的存储目录解析。
你运行app.py时,当前工作目录为base/,因此util.py中的open("db.csv")实际会尝试读取base/db.csv,而非你预期的base/cmod/db.csv,因此触发文件不存在报错。
修复代码
兼容全Python版本写法(基于os模块)
修改util.py代码如下:
from csvhandler import CSVFile import os def get_db(): # 取当前util.py文件的所在目录绝对路径 mod_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接得到db.csv的完整路径 db_file = os.path.join(mod_dir, "db.csv") with open(db_file, "r+") as db: data = CSVFile(db) return data
Python 3.4+ 简化写法(基于pathlib)
from csvhandler import CSVFile from pathlib import Path def get_db(): db_file = Path(__file__).parent / "db.csv" with open(db_file, "r+") as db: data = CSVFile(db) return data
修改后无论从哪个工作目录执行上层脚本,都能正确定位到cmod目录下的db.csv文件,满足文件存储位置要求。
内容的提问来源于stack exchange,提问作者Atharva Kale
相关产品推荐
相关产品推荐

