1

我有一个大的 JSON 文件,如下所示:

{"details":{

    "1000":[
        ["10","Thursday","1","19.89"],

        ["12","Monday","3","20.90"],
        ...
    ]
    "1001":[
        ["30","Sunday","11","80.22"],

        ["88","Wednesday","22","8.29"],
        ...
    ]

    }
}

现在,我使用ijson(交互式 Json)使用下面给出的代码从“详细信息”值中提取“1000”、“1001”等变量中存在的列表:

import ijson as ijson
filename='Clean_Details.json'

with open(filename,'r') as f:
    objects=ijson.items(f,'details.1001.item')
    for row in objects:
        print(row)
    print("Done")

但问题是:for循环没有在上面的代码中终止。在 1001 打印最终列表后,它会继续运行。

我猜上面代码中的 Generator( objects ) 没有遇到StopIteration不知道为什么。

有人可以帮忙吗?一点帮助将不胜感激。

4

1 回答 1

2

好的,因为JSON文件的大小超过800MB,大约有超过一百万条记录,所以解析需要时间来完成,所以它

循环最终终止,但需要一些时间才能完成。在具有正常规格的电脑上,它肯定需要一些时间。

还使用:

import ijson as ijson

在非常大的文件上要慢得多,因为大多数解析都是使用 python 后端代码进行的,所以为了提高速度,

使用起来更好

import ijson.backends.yajl2_cffi as ijson

因为它有一个使用cffi的 C 语言后端,这确实提高了上述代码的运行时间。

于 2016-08-19T10:33:58.053 回答