我正在用Python编写一个脚本,它会将一些数据组织成一个dicts列表:
[{'name': 'first_thing', 'color': 'blue', 'flavour': 'watermelon' },
{'name': 'second_thing', 'color': 'red' },
{'name': 'third_thing', 'color': 'blue', 'size': 'huge!' }]
我正在尝试确定将此数据存储在文件中的方法。我的考虑因素:
我的第一次尝试是使用Pickle,它符合简单的标准,但它依赖于Python,我必须进行unpickle,追加,然后重新制作。
我认为似乎可行的其他格式(我的反对意见):
任何人都有这些或其他格式的论据吗?
答案 0 :(得分:2)
Pickle应该可以正常工作。 直接存储dicts(不在列表中)以使附加更容易:
>>> 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()
在后续会话中,将另一个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
答案 1 :(得分:1)
鉴于您需要稍后添加数据,YAML可能是您正在寻找的格式。它被明确地设计为支持附加数据元素和日志文件,json故意是该语言的正确子集,并且它具有一些有用的元标记,用于自定义类的强大跨语言序列化。
答案 2 :(得分:1)
对于大多数情况,我认为JSON应该是你最好的选择。
使用simplejson将dict的列表转换为JSON,这将简单如下:
import simplejson as json
my_list = [{'name': 'first_thing', 'color': 'blue', 'flavour': 'watermelon'}, {'name': 'second_thing','color': 'red' }, {'name': 'third_thing', 'color': 'blue', 'size': 'huge!'}]
output = json.dumps(my_list, ident=4)
结果JSON将是:
[
{
"color": "blue",
"flavour": "watermelon",
"name": "first_thing"
},
{
"color": "red",
"name": "second_thing"
},
{
"color": "blue",
"name": "third_thing",
"size": "huge!"
}
]
现在,这个JSON完全是一个有效的JSON字符串。
这是一个JSON array。所以我认为你不需要删除“[”和“]”。由于您将python列表传递给simplejson,因此将返回JSON列表。
答案 3 :(得分:0)
从您的示例数据片段来看,您的数据看起来确实比更复杂的格式更适合表格格式。如果您的dicts的密钥是事先已知的,并且在每个条目中使用,我认为CSV是正确的选择。 Python还有一个csv模块,可以让它变得更容易。