保存数据的最佳方法

Len*_*ers 10 python serialization save

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

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

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

Bre*_*own 11

如果您的数据非常简单,就像字符串或数字集合的集合一样,我会使用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]]'
Run Code Online (Sandbox Code Playgroud)

然后将该字符串写入文件.当你想重新加载它时,如下所示:

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

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

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

  • JSON 的好处在于,与 Pickle 不同,它与语言无关。 (2认同)

Sam*_*i N 8

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

将Sqlite引入Python非常简单 - 只需在源代码文件中导入库并打开与数据库的连接即可.请参阅python 文档.

编辑:发现一个关于Python + Sqlite 的新教程似乎很好.