保存数据的最佳方法

时间:2013-01-24 19:34:15

标签: python serialization save

我上了一堂课,想要跟踪学生的统计数据。我打算稍后制作一个GUI来操作这些数据。

我的主要问题是:保存并稍后检索此数据的最佳方法是什么?

我读过关于pickle和JSON的内容,但我并没有真正了解它们是如何工作的(特别是关于它们如何保存数据,例如以哪种格式和位置)。

5 个答案:

答案 0 :(得分:9)

如果您的数据非常简单,就像字符串或数字集合的集合一样,我会使用json。 JSON是什么,是简单数据类型和简单数据类型组合的字符串表示。使用json模块将数据转换为字符串后,您可以自己将其写入文件。

这非常简单:

>>> my_data = [range(5) for i in range(5)]
>>> my_data
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
>>> import json
>>> json.dumps(my_data)
'[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]'

然后将该字符串写入文件。如果你想重新加载它,就像这样:

>>> import json
>>> string_from_file
'[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]'
>>> my_saved_data = json.loads(string_from_file)
>>> my_saved_data
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]

如果您的数据更复杂,并且涉及除内置集合对象之外的类,则pickle是更好的选择。关于泡菜的一个非常重要的事情是,泡菜中存在安全漏洞,并且挑选你自己没有挑剔的任何东西是个坏主意。 pickle容易受到本文中详述的安全问题的影响:http://www.kalzumeus.com/2013/01/31/what-the-rails-security-issue-means-for-your-startup/

如果您的数据大小非常大,或者您经常保存/加载它,或者出于任何原因使用json并保存到本地文件是不够的,那么数据库将是最佳选择。

答案 1 :(得分:7)

对于持久数据(存储有关学生的信息),数据库是一个不错的选择。正如已经提到的,Python附带了Sqlite3,这通常足够好,至少用于开发目的。

将Sqlite简介到Python很简单 - 只需在源代码文件中导入库并打开与数据库的连接即可。请参阅python documentation

编辑:找到关于Python + Sqlite的a new tutorial似乎不错。

答案 2 :(得分:2)

使用数据库。 SQLAlchemy与SQLight是一个良好的开端。无论如何,你最终会在那里结束。

使用pickle模块将所有内容转储出去。 (实际上没有什么可以理解的,你保存对象然后再次加载它们,这很简单)。

答案 3 :(得分:1)

您可以使用pickling,Python的序列化机制:

  

pickle模块实现了一个基本但强大的算法,用于序列化和反序列化Python对象结构。 “Pickling”是将Python对象层次结构转换为字节流的过程,“unpickling”是反向操作,从而将字节流转换回对象层次结构。酸洗(和涂抹)也可称为“序列化”,“编组”,[1]或“展平”,但为了避免混淆,这里使用的术语是“酸洗”和“涂抹”。

答案 4 :(得分:1)

您也可以使用csv files模块。这取决于你需要什么。

相关问题