如何解决Colab中读取pickle二进制文件的嵌入空字节错误?
解决Colab中读取文件时出现的"embedded null byte"错误
你遇到的这个ValueError: embedded null byte问题,根源是对google.colab.files.upload()的返回值理解有误。咱们一步步拆解问题并解决:
错误原因分析
files.upload()执行后,返回的uploaded字典里,键是上传的文件名,值是文件的二进制内容,而不是文件在Colab中的路径。你原来的代码试图用open(uploaded['train_qa.txt'], "rb")去打开这个二进制数据,相当于把字节流当成了文件路径字符串,自然会出现包含null字节的错误。
针对性解决方案
有两种直接解决的方式,根据你的需求选择:
方案1:直接读取Colab本地目录中的文件
上传的文件会被保存到Colab的当前工作目录下,你可以直接用文件名打开:
import pickle # 可选:执行后列出当前目录文件,确认文件已上传 !ls # 直接用文件名打开并加载数据 with open('train_qa.txt', "rb") as fp: train_data = pickle.load(fp)
方案2:直接使用uploaded中的二进制数据
既然uploaded['train_qa.txt']已经是文件的二进制内容,你可以跳过open()步骤,直接用pickle.loads()加载:
import pickle from google.colab import files uploaded = files.upload() # 直接从二进制数据加载pickle对象 train_data = pickle.loads(uploaded['train_qa.txt'])
验证小技巧
执行!ls命令可以查看当前工作目录下的文件,确认train_qa.txt存在,这能帮你排除文件未正确上传的情况。
内容的提问来源于stack exchange,提问作者Akash sharma
相关产品推荐
相关产品推荐

