使用Python gzip模块读取GZ文件时触发BadGzipFile错误求助
问题描述
- 源文件为JSON格式,被标注为GZ压缩格式,可通过Notepad++正常打开,但执行以下两段Python代码读取时,均触发
BadGzipFile错误:
BadGzipFile: Not a gzipped file (b'{\n')
第一段测试代码
import gzip # Open the GZIP file in text mode ('rt') with gzip.open('example.gz', 'rt') as f: file_content = f.read() print(file_content)
第二段测试代码
import gzip with gzip.open('example.gz', 'r') as fin: for line in fin: print('got line:', line)
示例JSON数据
{ "metadata_version": 1, "created": "2024-01-31T16:02:11.400125+00:00", "domain": { "name": "myname", "version": 1, "type": "core" }, "id1": "01HNG439A8M7395MB9CWC4XSKC", "id2": { "id3": "efbc9315-6a27-455b-9050-02ea08eb1b69", "id4": "05933069-eeb5-4801-8801-fdd9819d08bf", "id5": "8b642da5-e954-402c-bcb9-a196d594ed62" }, "data": "AAAAAAAA22RzW7CMBCEXyXymVQJNOHnVgGlHIoikvbQ2+IsYMnYdNemQlXfvQ4Q4MB1ZvebWftXVASGQTplzcyrWozEWub9LM8HsUyyNE5TxBjSvoyTJEuyfPUMvXUqOmKJ3x7ZTcChGBmvdUeMNQIps3mznnE" }
解决方案
错误信息里的b'{\n'说明文件开头是JSON的左大括号,核心问题是这个.gz文件并未被gzip压缩,要么是扩展名标错,要么是压缩过程出错。
解决步骤及代码调整
- 验证文件类型
直接用文本编辑器打开文件,若内容和示例JSON一致,说明是纯JSON文件,改用普通文件读取方式:
with open('example.gz', 'r', encoding='utf-8') as f: file_content = f.read() print(file_content)
- 排查压缩格式问题
如果确实是压缩文件但Python的gzip模块识别不了,可能是用了zip等其他压缩格式(扩展名误标为gz),改用zipfile模块读取:
import zipfile with zipfile.ZipFile('example.gz', 'r') as zip_file: # 假设压缩包内仅有一个JSON文件,获取文件名 json_file_name = zip_file.namelist()[0] with zip_file.open(json_file_name) as f: content = f.read().decode('utf-8') print(content)
- 检查文件完整性
如果以上方法都不行,用系统自带的解压工具尝试解压该文件,若解压失败,说明文件已损坏,需要重新获取正确的压缩文件。
内容的提问来源于stack exchange,提问作者Anson
相关产品推荐
相关产品推荐

