在python中轻松保存/加载数据

nos*_*nos 12 python io

在python中保存和加载数据的最简单方法是什么,最好是以人类可读的输出格式?

我正在保存/加载的数据包含两个浮点数向量.理想情况下,这些矢量将在文件中命名(例如X和Y).

我的当前save()load()函数使用file.readline(),file.write()以及字符串到浮点转换.必须有更好的东西.

Jam*_*low 24

获得人类可读输出的最简单方法是使用序列化格式,如JSON.Python包含一个json库,可用于将数据串行化为字符串.与pickle一样,您可以将其与IO对象一起使用以将其写入文件.

import json

file = open('/usr/data/application/json-dump.json', 'w+')
data = { "x": 12153535.232321, "y": 35234531.232322 }

json.dump(data, file)
Run Code Online (Sandbox Code Playgroud)

如果要获取简单的字符串而不是将其转储到文件中,可以使用json.dumps()代替:

import json
print json.dumps({ "x": 12153535.232321, "y": 35234531.232322 })
Run Code Online (Sandbox Code Playgroud)

从文件中读回也很简单:

import json

file = open('/usr/data/application/json-dump.json', 'r')
print json.load(file)
Run Code Online (Sandbox Code Playgroud)

json库是功能齐全的,所以我建议查看文档,看看你可以用它做什么样的事情.


Sve*_*ach 9

有几个选项 - 我不知道你喜欢什么.如果两个向量具有相同的长度,您可以使用numpy.savetxt() 保存向量,比如xy,作为列:

 # 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)
Run Code Online (Sandbox Code Playgroud)

如果你正在处理更大的浮动向量,你应该使用NumPy.


Len*_*bro 7

  • 如果它应该是人类可读的,我也会使用JSON.除非您需要与企业类型的人交换,否则他们更喜欢XML.:-)

  • 如果它应该是人类可编辑的并且不是太复杂,我可能会采用某种类似INI的格式,例如configparser.

  • 如果它很复杂,而且不需要交换,我只需要腌制数据,除非它非常复杂,在这种情况下我会使用ZODB.

  • 如果它是大量数据,需要交换,我会使用SQL.

我认为这几乎涵盖了它.