如何在Python中读取文件的每一行并将每一行存储为列表中的元素?
我想逐行读取文件,并将每行附加到列表的末尾.
我将JSON数据存储在变量中data.
我想将其写入文本文件进行测试,因此我不必每次都从服务器获取数据.
目前,我正在尝试这个:
obj = open('data.txt', 'wb')
obj.write(data)
obj.close
Run Code Online (Sandbox Code Playgroud)
我收到错误:
TypeError: must be string or buffer, not dict
如何解决这个问题?
我查看了Python文档提供的信息,但我仍然有点困惑.有人可以发布编写新文件的示例代码,然后使用pickle将字典转储到其中吗?
我需要将一个小dict对象保存到磁盘,其对象的类型str和值是ints ,然后恢复它.像这样的东西:
{'juanjo': 2, 'pedro':99, 'other': 333}
Run Code Online (Sandbox Code Playgroud)
什么是最好的选择,为什么?用pickle或用simplejson?序列化?
我使用的是Python 2.6.
我的代码在很大程度上依赖于yaml来进行跨语言的序列化,并且在加速某些事情时,我注意到yaml与其他序列化方法(例如,pickle,json)相比非常慢.
所以真正让我感到震惊的是,当输出几乎相同时,json比yaml快得多.
>>> import yaml, cjson; d={'foo': {'bar': 1}}
>>> yaml.dump(d, Dumper=yaml.SafeDumper)
'foo: {bar: 1}\n'
>>> cjson.encode(d)
'{"foo": {"bar": 1}}'
>>> import yaml, cjson;
>>> timeit("yaml.dump(d, Dumper=yaml.SafeDumper)", setup="import yaml; d={'foo': {'bar': 1}}", number=10000)
44.506911039352417
>>> timeit("yaml.dump(d, Dumper=yaml.CSafeDumper)", setup="import yaml; d={'foo': {'bar': 1}}", number=10000)
16.852826118469238
>>> timeit("cjson.encode(d)", setup="import cjson; d={'foo': {'bar': 1}}", number=10000)
0.073784112930297852
Run Code Online (Sandbox Code Playgroud)
PyYaml的CSafeDumper和cjson都是用C语言编写的,所以这不是C和Python速度问题.我甚至添加了一些随机数据来查看cjson是否正在进行任何缓存,但它仍然比PyYaml快.我意识到yaml是json的超集,但是如此简单的输入,yaml序列化器怎么能慢2个数量级呢?
在过去6个月左右的时间里,我一直在使用YAML格式取得了一定的成功.
但是,YAML解析器的纯Perl实现对于手写可读文件来说相当烦躁,并且(在我看来)有令人讨厌的怪癖,例如在文件末尾需要换行.与我的其他程序相比,它也非常缓慢.
我正在思考我的项目的下一个演变,我正在考虑使用JSON(YAML的一个大部分严格的子集,事实证明).但是哪种格式在Perl中拥有最多的社区牵引力和努力?
现在看来,Perl,YAML或JSON中的简单数据描述的长期格式更好,为什么?
我正在用Ruby创建一个JSON文件.我需要在JSON文件中创建对象"companies".
预期结果:
{"companies":[
{\"label\":\"Wayfair \",\"values\":[54]},
{\"label\":\"Move24 \",\"values\":[29]},
{\"label\":\"Auto1 \",\"values\":[23]},
...
]}
Run Code Online (Sandbox Code Playgroud)
我得到了什么:
[
"{\"label\":\"Wayfair \",\"values\":[54,54]}",
"{\"label\":\"Move24 \",\"values\":[29,29]}",
"{\"label\":\"GetYourGuide \",\"values\":[28,28]}",
"{\"label\":\"Auto1.com \",\"values\":[20,20]}", ...
]
Run Code Online (Sandbox Code Playgroud)
我的代码:
data_hash = data_hash.map {|k,v| {label: k, values: v}}
companies_json = []
data_hash.each do |hash|
companies_json << hash.to_json
end
File.open('companies.json', 'w') do |f|
f << companies_json
end
Run Code Online (Sandbox Code Playgroud) YAML 似乎比 JSON 格式的对象更具可读性,除了可读性之外,PyAML 代替 JSON 有什么优点或缺点?我们应该如何在两者之间做出决定,请注意,我不是在问两者之间的区别,而是关于为什么以及何时使用另一个的建议?
YAML 1.2是(关于重复键的一个小警告)JSON的超集,因此任何有效的JSON文件也是有效的YAML文件.但是,YAML 1.1规范(具有最多库支持)并未提及JSON.大多数有效的JSON文件都是有效的YAML 1.1文件,但我通过试验PyYaml和Python的标准JSON库发现了至少一个异常:
12345e999被解释为PyYAML字符串和IEEE无穷大的Python的JSON库.有没有人有一个完整的差异列表,比在特定实现中测试边缘情况更有力地确定?(也就是说,从规范的比较中?)例如,我想生成JSON字符串,它们将由JSON解析器和YAML 1.1解析器以相同的方式解释:我必须在字符串上放置哪些约束?