Jupyter Notebook使用read_csv创建相对路径读取文件报错及跨设备运行方案咨询
Jupyter Notebook相对路径读取文件问题解决方案
报错原因
你遇到的报错是相对路径和Jupyter Notebook运行时的工作目录不匹配导致的:
你将.ipynb脚本和MyFile.csv都存放在了Park文件夹内,若你是进入Park文件夹后启动的Jupyter、或是在Jupyter界面中进入Park目录后打开的脚本,此时脚本的运行工作目录就是Park本身。写Park/MyFile.csv相当于在Park目录下再找一层名为Park的子目录读取文件,自然会提示路径不存在;直接写文件名是读取当前工作目录下的文件,所以可以正常运行。
直接写文件名的跨设备可用性
只要你压缩分发时,严格保持.ipynb脚本和MyFile.csv在同一个文件夹层级(也就是直接打包整个Park文件夹发送),接收方解压后,从该文件夹内启动Jupyter Notebook再打开对应脚本,直接写文件名的写法完全可以在其他电脑正常运行。
更稳妥的通用相对路径写法
为了避免部分接收方从其他目录启动Jupyter导致工作目录不匹配,可以使用代码动态获取当前脚本所在目录,自动拼接文件路径,只要两个文件的相对层级不变,无论从哪个路径启动Jupyter都能正常读取:
基于pathlib的写法(Python3.4+内置,更简洁)
from pathlib import Path import pandas as pd # 获取当前脚本所在目录的绝对路径 current_dir = Path().resolve() # 拼接csv文件路径 csv_path = current_dir / "MyFile.csv" data = pd.read_csv(csv_path) data.head()
基于os模块的写法
import os import pandas as pd # 获取当前脚本所在目录的绝对路径 current_dir = os.path.dirname(os.path.abspath("__file__")) # 拼接csv文件路径 csv_path = os.path.join(current_dir, "MyFile.csv") data = pd.read_csv(csv_path) data.head()
分发注意事项
- 直接打包整个
Park文件夹发送,不要单独拆分脚本和csv文件,避免接收方放错文件层级 - 可在压缩包内附加简单提示,告知接收方解压后进入
Park文件夹启动Jupyter即可正常运行
内容的提问来源于stack exchange,提问作者Nel L
相关产品推荐
相关产品推荐

