Python中数据的简单保存/加载
在Python中,保存和加载数据最简单的方法是什么?最好是能以人类可读的格式输出。
我保存和加载的数据包含两个浮点数的向量。理想情况下,这些向量在文件中应该有名字(比如X和Y)。
我现在的save()
和load()
函数使用file.readline()
、file.write()
以及字符串转浮点数的转换。肯定有更好的方法。
7 个回答
8
如果你希望它能被人看懂,我推荐用JSON。除非你需要和一些大公司的人交换数据,他们更喜欢用XML。:-)
如果你希望它能被人编辑,而且内容不太复杂,我可能会选择一种类似INI的格式,比如configparser。
如果数据比较复杂,而且不需要交换,我会直接把数据进行序列化,除非它非常复杂,那我会使用ZODB。
如果数据量很大,并且需要交换,我会使用SQL。
我觉得这些基本上涵盖了所有情况。
27
最简单的获取人类可读输出的方法是使用像JSON这样的序列化格式。Python有一个json库,你可以用它把数据转换成字符串,也可以把字符串转换回数据。就像pickle一样,你可以把这个库和输入输出对象结合使用,把数据写入文件。
import json
file = open('/usr/data/application/json-dump.json', 'w+')
data = { "x": 12153535.232321, "y": 35234531.232322 }
json.dump(data, file)
如果你想要得到一个简单的字符串,而不是把数据写入文件,可以使用json.dumps()这个方法:
import json
print json.dumps({ "x": 12153535.232321, "y": 35234531.232322 })
从文件中读取数据也非常简单:
import json
file = open('/usr/data/application/json-dump.json', 'r')
print json.load(file)
json库功能非常强大,所以我建议你查看一下文档,看看它能做些什么。
9
有几种选择——我不太清楚你喜欢哪种。如果这两个向量长度相同,你可以使用 numpy.savetxt()
来把你的向量,比如 x
和 y
,保存为列的形式:
# saving:
f = open("data", "w")
f.write("# x y\n") # column names
numpy.savetxt(f, numpy.array([x, y]).T)
# loading:
x, y = numpy.loadtxt("data", unpack=True)
如果你处理的是较大的浮点数向量,建议你还是使用 NumPy。