13

我做了一个班级,我想在其中跟踪学生的统计数据。我打算稍后制作一个 GUI 来操作这些数据。

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

我读过有关 pickle 和 JSON 的内容,但我并不真正了解它们是如何工作的(尤其是关于它们如何保存数据,例如以哪种格式和在哪里保存)。

4

5 回答 5

18

如果您的数据非常简单,例如字符串或数字集合的集合,我会使用 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 需要了解的一件非常重要的事情是,pickle 中存在安全漏洞,如果你自己没有腌制任何东西,那么解开任何东西是个坏主意。pickle容易受到本文详述的安全问题的影响:http ://www.kalzumeus.com/2013/01/31/what-the-rails-security-issue-means-for-your-startup/

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

于 2013-01-24T20:09:39.410 回答
10

对于持久性数据(存储有关学生的信息),数据库是一个不错的选择。如前所述,Python 附带 Sqlite3,这通常足够好,至少对于开发目的而言。

将 Sqlite 引入 Python 很容易 - 只需在源代码文件中导入库并打开与数据库的连接。请参阅 python文档

编辑:找到了一个关于 Python + Sqlite 的新教程,看起来不错。

于 2013-01-24T20:13:28.240 回答
2

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

于 2013-01-24T19:43:48.020 回答
2

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

或者

用泡菜模块把所有东西都倒出来。(真的没什么好理解的,你保存对象然后再次加载它们,这真的很简单)。

于 2013-01-24T20:08:53.173 回答
1

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

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

于 2013-01-24T19:38:13.787 回答