当CRC检查失败时如何强制GZIP读取文件
我正在使用 gzip 模块在 Python 中读取一堆 gzip 压缩文件。不幸的是,其中一些未通过 CRC 检查,因此我正在寻找解决此问题的方法。环顾 StackOverflow,我发现了一些非常古老(2009 年)的答案,并且没有代码示例,因此看起来基本上可以使用底层 zlib 库忽略 CRC 检查,但我不知道如何实际操作。 这是我的代码的简单版本:
def check():
filenames = ['myfile_1.csv.gz', 'myfile_2.csv.gz']
for name in filenames:
data = gzip.open(name, 'r')
for row in data.read().splitlines():
# do stuff
pass
data.close()
I'm reading a bunch of gzip compressed files in Python using the gzip module. Unfortunately some of them fail the CRC check, so I'm looking for ways to go around this problem. Looking around StackOverflow I found some very old (2009) answers to this, and without code examples, so it looks like it's possible to basically ignore the CRC check using the underlying zlib library, but I can't figure out how to do it practically.
This is a simple version of my code:
def check():
filenames = ['myfile_1.csv.gz', 'myfile_2.csv.gz']
for name in filenames:
data = gzip.open(name, 'r')
for row in data.read().splitlines():
# do stuff
pass
data.close()
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用
data.read(1)
代替data.read()
一次读取一个字节。这将确保您可以挤出错误前的最后一个字节。使用'rb'
读取二进制文件。在try
中执行此操作以捕获错误。Instead of
data.read()
usedata.read(1)
to read one byte at a time. This will make sure you can squeeze out the very last byte before the error. Use'rb'
to read binary. Do it in atry
to catch the error.