pandas.read_csv路径异常:IPython与VS Code Jupyter Notebook问题排查
解决Python文件读取路径与PYTHONPATH不匹配的问题
核心原因
PYTHONPATH仅负责引导Python查找模块/包的位置,完全不影响文件读取的相对路径逻辑。pd.read_csv('skew_all.csv')使用的是当前进程的工作目录(CWD),而非PYTHONPATH或脚本/笔记本所在目录,这是你遇到所有场景差异的根源。
针对性解决方案
方案1:强制统一工作目录到/code(最直接)
让所有环境的工作目录都指向/code,确保相对路径skew_all.csv始终指向/code/skew_all.csv:
- 终端IPython:启动前先执行
cd /code,或者启动后用IPython魔法命令%cd /code切换目录。 - VS Code Jupyter:
- 打开设置(Ctrl+,),搜索
Jupyter: Notebook File Root,设置值为/code; - 或者在笔记本开头添加魔法命令
%cd /code,强制切换工作目录。
- 打开设置(Ctrl+,),搜索
- 任意子目录启动的IPython/Jupyter:修改
ipython_config.py,添加启动自动切换逻辑:
保存后重启IPython/Jupyter,无论从哪个目录启动,都会自动切换到c.InteractiveShellApp.exec_lines = [ 'import os; os.chdir("/code")' ]/code。
方案2:使用绝对路径读取文件(更稳定)
如果不想依赖工作目录,可以通过模块位置或系统路径推导文件的绝对路径,彻底避免相对路径问题:
- 对于Python脚本(比如
errata下的模块):from pathlib import Path # 从当前脚本所在目录,向上找到/code目录 root_dir = Path(__file__).parent.parent skew_file = root_dir / "skew_all.csv" pd.read_csv(skew_file) - 对于Jupyter笔记本:
这种方式完全不受工作目录影响,适合跨环境复用。from pathlib import Path # 如果笔记本在/code/errata下,向上一级就是/code root_dir = Path.cwd().parent skew_file = root_dir / "skew_all.csv" pd.read_csv(skew_file)
验证方式
执行以下代码查看当前工作目录,确认是否符合预期:
import os print(os.getcwd())
如果输出是/code,那么pd.read_csv('skew_all.csv')就能正常读取文件;如果不是,按照上述方案调整即可。
内容的提问来源于stack exchange,提问作者Dacian Peng
相关产品推荐
相关产品推荐

