我从服务器获取大量数据。我将它存储在字典和多维数组的组合中,它将用于简单的绘图。它看起来像:
>> print(data)
{'intensity_b2': [array([ 1.46562588e+09, 1.46562588e+09, 1.46562588e+09, ...,
1.46566369e+09, 1.46566369e+09, 1.46566369e+09]), array([ 0., 0., 0., ..., 0., 0., 0.])]}
>> print(len(data['intensity_b2'][0]))
37071
为避免每次运行脚本时都提取数据,我想将此数据结构保存到文件中。我尝试将数据存储为
with open("data.dat", 'w') as f:
f.write(str(data))
并用
阅读with open(data_store, 'r') as f:
data = ast.literal_eval(f.read())
建议here 。但是,我收到错误
ValueError:格式错误的节点或字符串:< _ast.Call对象位于0x108fce5f8>
我怀疑这是因为数据与第一个打印输出中显示的...
一起存储(即上面的第一个print(data)
字面意思是数据在文件中的外观) 。如何将带有大数组的字典写入文件并随后读取?
答案 0 :(得分:1)
您的问题是str
不适合序列化数据。通常,对象将具有字符串表示,以使人们理解它们是什么。对于原始对象,它甚至可以eval
获取一个等效对象的格式,但通常情况并非如此。
您需要决定如何序列化数据。你可以使用类似JSON之类的东西,但是你需要弄清楚如何从原始数据类型转换对象,我认为你已经很清楚你不使用原始数据类型了。 / p>
您可能希望使用pickle创建数据的序列化版本,稍后您可以将其取消,并获得相同的数据类型。
答案 1 :(得分:1)
您可以使用pickle
正确处理序列化:
In [23]: a
Out[23]:
{'intensity_b2': [array('f', [1465625856.0, 1465625856.0, 1465625856.0]),
array('f', [1465663744.0, 1465663744.0, 1465663744.0])]}
In [24]: pickle.dump(a, open('foo.p', 'wb'))
In [25]: aa = pickle.load(open('foo.p', 'rb'))
In [26]: aa
Out[26]:
{'intensity_b2': [array('f', [1465625856.0, 1465625856.0, 1465625856.0]),
array('f', [1465663744.0, 1465663744.0, 1465663744.0])]}
这完全符合您的要求:将数据结构保存到文件中,然后从文件中读取。
然而,看起来你在这里重新发明轮子。您可能需要查看numpy
和pandas
。