python - 什么是 Python 的良好临时存储和传输格式?

标签 python file-io storage

我正在用 Python 编写一个脚本,它将吐出一些组织为字典列表的数据:

[{'name': 'first_thing', 'color': 'blue', 'flavour': 'watermelon' },
 {'name': 'second_thing', 'color': 'red' },
 {'name': 'third_thing', 'color': 'blue', 'size': 'huge!' }]

我正在尝试确定一种将这些数据存储在文件中的方法。我的考虑:

  1. 我希望它易于阅读和编写,这样我就可以将数据加载回脚本并进一步操作它。
  2. 我希望它是一种非特定于 Python 的格式。也许以后我会想在 PHP 或其他东西中使用这些数据,谁知道呢?
  3. 我希望它是一种易于附加更多数据的格式。如果我的文件有一个包含 1000 个我的小字典项目的列表,我不想将所有 1000 个加载到内存中只是为了在末尾添加一个项目。

我的第一个尝试是使用 Pickle,它满足简单的标准,但它依赖于 Python,我必须先取消 pickle,附加,然后再 pickle。

其他我认为可行的格式(我反对):

  • JSON(附加会很烦人,也许)
  • 搁置(特定于 python)
  • CSV(类似于胶带,不是那么优雅,但它可能会起作用)
  • 某种轻型数据库,如 sqlite(这里可能太花哨了)

有人对这些格式或其他格式有异议吗?

最佳答案

Pickle 应该可以正常工作。 直接存储字典(不在列表中)以使附加更容易:

>>> from pickle import dump, load
>>> f = open('stor.bin', 'w')
>>> dump(dict(a=1), f)
>>> dump(dict(b=2), f)
>>> dump(dict(c=3), f)
>>> f.close()

在后续 session 中,将另一个 dump() 直接附加到文件末尾:

>>> f = open('store.bin', 'a')
>>> dump(dict(d=4), f)
>>> f.close()   

要阅读,只需重复执行 load() 直到到达文件末尾:

>>> f = open('stor.bin', 'r')
>>> load(f)
{'a': 1}
>>> load(f)
{'b': 2}
>>> load(f)
{'c': 3}
>>> load(f)
{'d': 4}
>>> load(f)

Traceback (most recent call last):
   ...
EOFError

关于python - 什么是 Python 的良好临时存储和传输格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7816113/

相关文章:

python - 显示完整的行,突出显示数据帧 df1 、 df2 之间的差异,但仅当行单元格中存在差异时

javascript - Selenium Python 获取 <script> 标签信息?

c - 在 C 中显示外部文件的信息

.net - 在VB.NET中获取文件修改日期

file-io - Windows 中的 Dart 文件复制

node.js - 即时将文件从 S3 移动到 AWS EFS

Java-数据存储和自动运行程序?

找到最有效的基数来存储大整数的算法

python - 在 Python Matplotlib 中向现有绘图添加多边形层

python - 矢量化:不是有效的集合