python - 如何在 python 中读取 JSON 文件作为具有特定格式的块的流
问题描述
我在 JSON 中有一个约 8 GB 的巨大文件,我想将它作为流读取,一次包含 1000 个示例块。所以我搜索了很多并尝试了几个包,但没有一个真的能完成这项工作。
我的文件格式如下:
{
"Elem1": [
{
"orgs": [],
},
{
"people":[]
},
],
"Elem2"":[
{
"orgs": [],
},
{
"people":[]
},
],
...
}
如您所见,每个element
都保存为一个元组,其中包含两个字典和重复出现的键。有没有办法我可以读取/加载/处理上面的元素块中的文件,即
chunk_1 = [ Elem1, Elem2, ... ]
进入RAM并从中获取键的值?任何想法如何做到这一点?感谢您的帮助。
最好的问候克里斯
解决方案
正如 Serge 所说,您将需要一个自定义解析器来完成这项工作。如下所示:
stack = []
json_string = ""
count = 0
with open(filename) as f:
while True:
c = f.read(1)
if c == '{' or c == '[':
stack.append(c)
elif c == '}' or c == ']':
stack.pop()
json_string += c
if len(stack) == 1:
json_string += '}'
count += 1
if count == DESIRED_COUNT :
break
最终json_string
将包含带有 DESIRED_COUNT 个对象的 json
推荐阅读
- google-apps-script - Google 表格脚本挂在 getRange 上
- sql - 请问如何优化这个查询?
- c++ - 为什么这个 constexpr if 不能编译
- ruby-on-rails - 胭脂宝石最小示例未显示格式?
- php - 未找到使用 Web 中间件的 Laravel API 路由
- c - 存在链接和符号时的“未定义引用”
- reactjs - react+spring boot 开发设置
- json - 如何使用 f# 反序列化 json 以获得正确的类型
- node.js - 如何使用 Nodejs 对从 mongoDB 获取的数据求和
- c# - 如何将任何类型的值传递给函数