如何使用Python读取json.gz文件?

CCl*_*rke 1 python json gzip

编辑:我已经看到了 SA 上关于此问题的所有问题,它们都给了我我在这里询问的错误 - 请您将其保持打开状态以便我可以获得一些帮助吗?

我有一个可以使用 Bash 非常简单地读取的文件,如下所示: gzip -d -c my_file.json.gz | jq . 这确认它是有效的 JSON。但是当我尝试使用 Python 来读取它时,如下所示:

import json
import gzip
with gzip.open('my_file.json.gz') as f:
    data = f.read() # returns a byte string `b'`
json.loads(data)
Run Code Online (Sandbox Code Playgroud)

我收到错误:

json.decoder.JSONDecodeError: Extra data: line 2 column 1 (char 1632)
Run Code Online (Sandbox Code Playgroud)

但我知道它是来自我的 Bash 命令的有效 JSON。我已经被这个看似简单的问题困扰了很长一段时间,并尝试了一切感觉。有人可以帮忙吗?谢谢。

tri*_*eee 5

就像文档告诉您的那样,gzip.open()默认返回一个二进制文件句柄。传入一种rt模式以将数据读取为文本:

with gzip.open("my_file.json.gz", mode="rt") as f:
    data = f.read()
Run Code Online (Sandbox Code Playgroud)

...或单独的.decode()二进制数据(显然你必须知道或猜测它的编码)。

如果您的输入文件在不同的行(称为“JSON行”或“JSONS”)上包含多个JSON记录,其中每个记录都是有效的JSON结构,则jq可以在没有任何额外选项的情况下处理该记录,但Python的json模块需要您在更多细节,也许是这样的:

with gzip.open("my_file.json.gz", mode="rt") as f:
    data = [json.loads(line) for line in f]
Run Code Online (Sandbox Code Playgroud)