为何Python终端提示top_secret_file.dat文件不存在?Spyder可正常运行的代码复制到Jupyter Notebook后出现FileNotFoundError
为什么Jupyter Notebook会提示文件不存在,而Spyder却正常运行?
这事儿核心原因其实很直白:Spyder和Jupyter Notebook的默认工作目录不一样!
当你在Spyder里跑代码时,它默认的工作目录就是你脚本所在的文件夹,所以能顺利找到top_secret_file.dat;但Jupyter启动时的默认目录通常是你的用户主目录(比如Windows下的C:\Users\你的用户名,Mac/Linux下的/home/你的用户名),如果你的.dat文件没放在这个目录里,自然就会触发找不到文件的报错。
下面给你几个实用的解决办法,按操作复杂度排序:
方法1:直接使用文件的绝对路径
把代码里的文件名改成完整的绝对路径,让Python直接定位到文件位置,比如:
# Windows系统示例(注意加r前缀避免转义问题) f = open(r"D:\my_python_projects\top_secret_file.dat", "rb") # Mac/Linux系统示例 f = open("/Users/你的用户名/my_projects/top_secret_file.dat", "rb")
方法2:启动Jupyter时切换到项目目录
每次打开Jupyter前,先打开命令行(CMD或终端),用cd命令切换到你的项目文件夹,再运行jupyter notebook命令。这样Jupyter的工作目录就和你的文件所在目录一致,代码里直接用文件名就行。
方法3:在Jupyter里动态切换工作目录
在Notebook的第一个单元格里运行这段代码,手动切换到你的项目文件夹:
import os # 替换成你的文件所在文件夹的绝对路径 os.chdir("D:\my_python_projects") # 可以验证当前目录是否正确 print(os.getcwd())
运行完这个单元格后,再执行读写文件的代码就不会报错了。
另外顺便提个小建议:读写文件时最好用with语句,不用手动调用close(),代码更安全规范:
import pickle # 写入文件 my_var = {None:None} with open("top_secret_file.dat", "wb") as f: pickle.dump(my_var, f) # 读取文件 with open("top_secret_file.dat", "rb") as f: my_var = pickle.load(f)
内容的提问来源于stack exchange,提问作者dprogm




