为何gzip.open()提示找不到已存在的.pkl.gz压缩文件?
解决.pkl.gz文件找不到的问题
问题原因
你遇到的FileNotFoundError核心原因是当前工作目录与脚本所在目录不一致:
- 代码里
os.listdir("W:\Code\Machine Learning\digit-recognition-dnn\data")用了绝对路径,所以能正确列出文件夹里的文件; - 但
gzip.open(name, 'rb')用的是相对路径,这个路径是以Python的当前工作目录为基准,而非脚本所在的data文件夹,导致找不到文件。修改文件名的操作完全没触及根本问题,所以没用。
解决方案
推荐两种可靠的解决方式:
1. 使用文件绝对路径
直接指定mnist.pkl.gz的完整路径,注意用原始字符串(前缀r)避免转义字符干扰:
name = r"W:\Code\Machine Learning\digit-recognition-dnn\data\mnist.pkl.gz"
2. 基于脚本目录构建路径(更灵活)
通过os.path.dirname(__file__)获取脚本所在的目录,再用os.path.join拼接文件名,这样无论你在哪个目录下运行脚本,都能正确找到文件:
import gzip import pickle import matplotlib.cm as cm import matplotlib.pyplot as plt import os # 获取当前脚本所在目录 script_dir = os.path.dirname(__file__) # 拼接得到目标文件的完整路径 file_path = os.path.join(script_dir, 'mnist.pkl.gz') with gzip.open(file_path, 'rb') as f: train_set, valid_set, test_set = pickle.load(f) train_x, train_y = train_set plt.imshow(train_x[0].reshape((28, 28)), cmap=cm.Greys_r) plt.show()
内容的提问来源于stack exchange,提问作者Sentient Platypus
相关产品推荐
相关产品推荐

