使用python读取chunk大小的JSON文件时出错



我有一个大的json文件,所以我想在测试时读取块文件。我实现了下面的代码:

if fpath.endswith('.json'):
with open(fpath, 'r') as f:
read_query = pd.read_json(f, lines=True, chunksize=100)

for chunk in read_query:
print(chunk)

我得到错误:

File "nameoffile.py", line 168, in read_queries_func
for chunk in read_query:
File "C:UsersMePython38libsite-packagespandasiojson_json.py", line 798, in __next__
obj = self._get_object_parser(lines_json)
File "C:UsersMePython38libsite-packagespandasiojson_json.py", line 770, in _get_object_parser
obj = FrameParser(json, **kwargs).parse()
File "C:UsersMePython38libsite-packagespandasiojson_json.py", line 885, in parse
self._parse_no_numpy()
File "C:UsersMePython38libsite-packagespandasiojson_json.py", line 1159, in _parse_no_numpy
loads(json, precise_float=self.precise_float), dtype=None
ValueError: Expected object or value 

为什么我得到一个错误?

JSON文件看起来像这样:

[
{
"a": "13", 
"b": "55"
}, 
{
"a": "15", 
"b": "16"
}, 
{
"a": "18", 
"b": "45"
}, 
{
"a": "1650", 
"b": "26"
}, 
.
.
.
{
"a": "214", 
"b": "23"
}
]

此外,是否有一种方法来提取只是'a'属性的值,而读取文件?或者只有在我看完文件后才能做?

您的json文件只包含一个对象。根据chunksize参数的文档指向的行分隔的json文档:

pandas能够读写行分隔的json文件,这些文件在使用Hadoop或Spark的数据处理管道中很常见。

对于行分隔的json文件,pandas还可以返回一个迭代器,每次读取块大小的行。这对于大文件或从流中读取非常有用。

它还暗示lines=True,并且行的文档说:

以每行json对象的形式读取文件

这意味着像这样的文件可以工作:

{"a": 1, "b": 2}
{"a": 3, "b": 4}
{"a": 5, "b": 6}
{"a": 7, "b": 8}
{"a": 9, "b": 10}

这些不:

[
{"a": 1, "b": 2},
{"a": 3, "b": 4},
{"a": 5, "b": 6},
{"a": 7, "b": 8},
{"a": 9, "b": 10}
]

所以你必须一次读取文件,或者修改它,每行只有一个对象。

最新更新