cPickle.load()错误

时间:2012-04-25 12:51:24

标签: python linux pickle

我正在使用cPickle将结构数据转换为datastream格式并将其传递给库。我要做的是从手动编写的文件名“targetstrings.txt”中读取文件内容,并将文件内容转换为Netcdf库需要的格式,以下列方式,

注意:targetstrings.txt包含拉丁字符

op=open("targetstrings.txt",'rb')
targetStrings=cPickle.load(op)

Netcdf库将内容作为字符串。 在加载文件时,它会遇到以下错误,

cPickle.UnpicklingError: invalid load key, 'A'.

请告诉我如何纠正这个错误,我已经搜索过,但没有找到合适的解决方案。

任何建议,

2 个答案:

答案 0 :(得分:2)

pickle不是用于读/写通用文本文件,而是用于将Python对象序列化/反序列化为文件。如果您想阅读文本数据,请使用Python's usual IO functions

with open('targetstrings.txt', 'r') as f:
    fileContent = f.read()

如果看起来,库只是想要一个字符串列表,将每一行作为列表元素,你只需要这样做:

with open('targetstrings.txt', 'r') as f:
    lines=[l for l in f]
# now in lines you have the lines read from the file

答案 1 :(得分:0)

如上所述 - Pickle并不打算以这种方式使用。 如果您需要手动编辑复杂的Python对象,则需要将其作为Python对象读取并传递给另一个函数,还有许多其他格式可供使用 - 例如XML,JSON,Python文件本身。 Pickle使用Python特定的协议,虽然注意是二进制的(在协议的版本0中),而不是在Python版本中更改,但并不意味着这一点,甚至不是用于记录持久性或通信的Python对象的推荐方法(虽然它可以用于那些目的)。