读取pickle文件遇FileNotFoundError,已有conversation.json该如何解决?
解决FileNotFoundError:找不到'conversation'文件的问题
咱们一步步拆解问题,逐个解决:
核心问题梳理
你手里的文件是conversation.json,但代码里要么在找conversation.pickle,要么(从错误提示看)实际运行的代码在找conversation——这三个完全是不同的文件,系统当然找不到。另外,JSON和Pickle是两种完全不兼容的格式,不能直接用pickle.load()读取JSON文件,必须先做格式转换。
具体解决步骤
1. 先把JSON数据转成Pickle格式
先写一段小代码,读取你的JSON文件,把数据处理成vec_x和vec_y的结构,再保存为Pickle文件:
import json import pickle # 读取JSON文件(如果脚本和文件不在同一目录,要写绝对路径,比如'C:/Users/User/Desktop/thesemicolon-master/conversation.json') with open('conversation.json', 'r', encoding='utf-8') as f: conversation_data = json.load(f) # 这里要根据你JSON文件的实际结构处理数据! # 举个例子:如果你的JSON是[{"input": "...", "output": "..."}, ...]的结构 vec_x = [item["input"] for item in conversation_data] vec_y = [item["output"] for item in conversation_data] # 注意:如果数据需要做向量转换(比如用gensim处理),要在这里完成,确保vec_x和vec_y是numpy能识别的格式 # 把处理好的数据保存成Pickle文件 with open('conversation.pickle', 'wb') as f: pickle.dump((vec_x, vec_y), f)
2. 修正原有代码的两个细节
生成conversation.pickle后,回到你的原有代码,要改两个地方:
- 确保打开的文件名是
'conversation.pickle'(和错误提示里的'conversation'区分开) - 读取Pickle文件要用二进制模式
rb,你原来的代码用的是文本模式r,这也会出问题:
# 用绝对路径更稳妥,避免工作目录混乱 with open('C:/Users/User/Desktop/thesemicolon-master/conversation.pickle', 'rb') as f: vec_x, vec_y = pickle.load(f)
3. 快速确认文件位置的小技巧
如果不确定文件是不是在脚本的工作目录里,可以加一行代码打印当前路径:
import os print(os.getcwd()) # 输出当前工作目录,看看你的JSON/Pickle文件是不是在这里
最后核对一遍
- 确认
conversation.json存在,路径正确 - 运行转换代码生成
conversation.pickle - 原有代码用
rb模式读取正确的Pickle文件
这样应该就能解决找不到文件的问题啦!
内容的提问来源于stack exchange,提问作者Yao
相关产品推荐
相关产品推荐

