我可以访问一组文件(每个大约80-800mb)。不幸的是,每个文件只有一行。该行只包含一个JSON对象(列表的列表)。加载并将其解析为较小的JSON对象的最佳方式是什么?在Python中加载大型JSON列表的最佳方式是什么?
1
A
回答
5
已有类似帖子here。这里是他们提出的解决方案:
import json
with open('file.json') as infile:
o = json.load(infile)
chunkSize = 1000
for i in xrange(0, len(o), chunkSize):
with open('file_' + str(i//chunkSize) + '.json', 'w') as outfile:
json.dump(o[i:i+chunkSize], outfile)
+1
遇难,这就是python shell所说的 – ashish 2013-07-22 15:48:40
3
如果你想避免加载整个列表到内存中,你可以先处理该文件为文本:
使用堆栈跟踪和开放关闭括号/引号。浏览任何开门人的字符串,或当前更近的字符串。在扫描文本时,只需查看更接近的文本。当你阅读开瓶器时推一个,当你找到更近的时候将其弹出。
的JSON的全套是[
- >]
,{
- >}
和"
- >"
。不过你应该排除\"
。您可以在http://www.json.org/
检查规范然后,每当一个]
遇到和堆栈只有一个项目啪匹配[
后(顶级“[”),那么你就知道是时候开始新的一行。
最后,您应确保第一个[
和上一个]
不会出现在您的输出中。
这将为您提供单独的列表中的每个项目的JSON对象,每个项目在文件的单独一行上。
如果您深入了解python JSON库,应该有一些解析JSON的函数。即使它们不是公共接口的一部分,您也可以利用这些功能。
当然,您可以通过使用JSON库加载字符串,然后逐项(或多个项目)按照其他答案对其进行倾销来实现相同。
0
模块pandas 0.21.0
现在支持块大小作为read_json
的一部分。您可以加载并在同一时间处理一个块:
import pandas as pd
chunks = pd.read_json(file, lines=True, chunksize = 100)
for c in chunks:
print(c)
相关问题
- 1. 通过JSON加载ASP.Net usercontrols的最佳方式是什么?
- 2. 处理大型数据表的最佳方式是什么?
- 3. 在jQuery Mobile中加载大型嵌套列表的最快方法是什么?
- 4. 等待在QTP中加载帧的最佳方式是什么?
- 5. 在Python中移动列表的最佳方法是什么?
- 6. 在Django模型中表示URL的最佳方式是什么?
- 7. 在C#中解析大型XML(大小为1GB)的最佳方式是什么?
- 8. 在python中使用默认值做列表[0]的最佳方式是什么?
- 9. 优化大型jquery POST的最佳方式是什么?
- 10. 在MySQL的大型表上运行INNER JOIN的最佳方式是什么?
- 11. 在Rails中获得初始JSON的最佳方式是什么?
- 12. 在JSON中循环数组的最佳方式是什么?
- 13. 加载正确的PhoneGap文件的最佳方式是什么
- 14. 在iPhone上加载大图的最快方式是什么?
- 15. 加载spring config xmls的最佳方式是什么?
- 16. 从文件加载脚本的最佳方式是什么?
- 17. 加载自定义UIView的最佳方式是什么?
- 18. 保存和加载变量的最佳方式是什么?
- 19. 什么是加载/选择“控制器”类的最佳方式
- 20. 什么是异步加载小部件的最佳方式?
- 21. 在CardView列表中实现内部列表的最佳方式是什么?
- 22. 什么是加载大量的数据到SQL Server Express的最佳方式
- 23. 差异大数据列表的最佳方式,算法和方法是什么?
- 24. 序列化EMF模型实例的最佳方式是什么?
- 25. 在Python中创建“runner”脚本的最佳方式是什么?
- 26. 在python中处理字典的最佳方式是什么?
- 27. 在Python中实现“from。import *”的最佳方式是什么?
- 28. 在Python中实现Web服务的最佳方式是什么?
- 29. 在python中使用web服务的最佳方式是什么?
- 30. 在php中加载dll的最佳方法是什么?
我想您已经至少考虑[标准JSON模块(http://docs.python.org/library/json.html)。 – C2H5OH 2012-04-19 23:42:33
[将95MB JSON数组拆分为更小的块?](http://stackoverflow.com/questions/7052947/split-95mb-json-array-into-smaller-chunks) – 2012-04-21 02:49:27
@ C2H5OH - 是的,我是希望不将整个事物加载到内存中。 – 2012-04-23 05:30:23