我正在尝试解压缩一些 .json.gz
文件,但 gzip
向其中添加了一些字符,因此使其无法被 JSON 读取。
您认为问题是什么?我该如何解决?
如果我使用7zip等解压软件来解压该文件,这个问题就消失了。
这是我的代码:
with gzip.open('filename' , 'rb') as f:
json_content = json.loads(f.read())
这是我得到的错误:
Exception has occurred: json.decoder.JSONDecodeError
Extra data: line 2 column 1 (char 1585)
我使用了这段代码:
with gzip.open ('filename', mode='rb') as f:
print(f.read())
发现该文件以b'
开头(如下所示):
b'{"id":"tag:search.twitter.com,2005:5667817","objectType":"activity"
我认为 b'
是导致该文件在下一阶段无法使用的原因。您有什么解决方案可以删除b'
吗?这个压缩文件有数百万个,我无法手动执行此操作。
我在以下链接中上传了这些文件的示例 just a few json.gz files
最佳答案
问题不在于您在 print(f.read())
中看到的 b
前缀,这仅意味着数据是 bytes
序列(即整数 ASCII 值)而不是 UTF-8 字符序列(即常规 Python 字符串)—— json.loads()
都接受。 JSONDecodeError
是因为 gzip 压缩文件中的数据不是有效的 JSON format ,这是必需的。该格式看起来像 JSON Lines ——Python 标准库 json
模块不(直接)支持。
沙丘的answer到question @Charles Duffy 在某一时刻将其标记为由于此格式问题而无法按所示方式工作的副本。但是,从您在问题中添加链接的示例文件来看,文件的每行行上似乎都有一个有效的 JSON 对象。如果您的所有文件都是如此,那么一个简单的解决方法是逐行处理每个文件。
这就是我的意思:
import json
import gzip
filename = '00_activities.json.gz' # Sample file.
json_content = []
with gzip.open(filename , 'rb') as gzip_file:
for line in gzip_file: # Read one line.
line = line.rstrip()
if line: # Any JSON data on it?
obj = json.loads(line)
json_content.append(obj)
print(json.dumps(json_content, indent=4)) # Pretty-print data parsed.
请注意,它打印的输出显示了有效的 JSON 可能是什么样子。
关于python - 提取我的 .json.gz 文件时,会添加一些字符 - 并且该文件无法存储为 json 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54725683/