Python项目文件存在却报FileNotFoundError问题求助
问题根源:相对路径的参照基准搞混了!
你遇到的问题本质是Python中相对路径的参照基准不是脚本文件所在的文件夹,而是你运行脚本时的「当前工作目录」(CWD)。举个例子:
- 如果你的项目结构是这样的:
项目根目录/ ├── categories/ │ └── abc.csv ├── merchants/ │ └── 你的读文件脚本.py └── utils/ └── 你的生成CSV脚本.py - 要是你进入
merchants文件夹,直接运行python 你的读文件脚本.py,这时候Python的当前工作目录是merchants/,它会去merchants/categories/abc.csv找文件——但这个路径根本不存在,自然报错。 - 同理,当你在
utils文件夹里运行生成脚本时,Python会尝试在utils/categories/下创建abc.csv,但这个子文件夹不存在,所以也会抛出「找不到目录」的错误。
三种靠谱的解决方案
方案1:动态生成绝对路径(最推荐,不受运行位置影响)
利用Python的__file__变量获取脚本自身的路径,再拼接出CSV的正确路径。既可以用传统的os模块,也可以用更简洁的pathlib(Python3.4+支持):
用os模块实现(兼容所有Python3版本)
import os import pandas as pd # 获取当前脚本所在的绝对目录 script_dir = os.path.dirname(os.path.abspath(__file__)) # 跳到项目根目录(因为merchants/utils和categories是同级的,所以往上跳一级) project_root = os.path.dirname(script_dir) # 拼接CSV的完整路径 csv_full_path = os.path.join(project_root, 'categories', 'abc.csv') # 读文件 rfile = pd.read_csv(csv_full_path) # 写文件的话直接用这个路径就行 # pd.DataFrame(...).to_csv(csv_full_path, index=False)
用pathlib实现(更简洁直观)
from pathlib import Path import pandas as pd # 获取当前脚本的绝对路径 script_path = Path(__file__).resolve() # 项目根目录 = 脚本所在文件夹的父目录 project_root = script_path.parent.parent # 拼接CSV路径(pathlib支持/拼接,很方便) csv_full_path = project_root / 'categories' / 'abc.csv' # 读/写文件 rfile = pd.read_csv(csv_full_path) # pd.DataFrame(...).to_csv(csv_full_path, index=False)
方案2:固定从项目根目录运行脚本
不管你的脚本在哪个文件夹,都回到项目根目录去运行它。比如:
# 假设你现在在项目根目录下 python merchants/你的读文件脚本.py python utils/你的生成CSV脚本.py
这时候Python的当前工作目录就是项目根目录,'categories/abc.csv'这个相对路径就能正确指向目标文件,读写都不会报错。
方案3:提前创建categories目录(仅针对写文件的场景)
如果只是生成CSV时报错,也可以在写文件前先检查并创建categories目录(但这只能解决写的问题,读文件的路径问题还是得靠前两种方案):
import os import pandas as pd csv_path = 'categories/abc.csv' # 先获取目录路径 dir_path = os.path.dirname(csv_path) # 如果目录不存在就创建 if not os.path.exists(dir_path): os.makedirs(dir_path) # 再写文件 pd.DataFrame(...).to_csv(csv_path, index=False)
内容的提问来源于stack exchange,提问作者AnalyticsPy
相关产品推荐
相关产品推荐

