【发布时间】:2020-08-15 01:12:20
【问题描述】:
我正在阅读大量 gzip 文件。当我尝试以下代码时,由于某些文件已损坏,该过程无法完成。 Python 可以打开这些损坏的文件,但由于这些文件中某些行的错误,该过程会中断。
for file in files:
try:
fin=gzip.open(file,'rb')
except:
continue
for line in fin:
try:
temp=line.decode().split(",")
a,b,c,d=temp[0],int(temp[1]),int(temp[2]),int(temp[3])
except:
continue
但是由于以下错误,程序停止了。
处理损坏的gzip 文件的最佳方法是什么?
Traceback (most recent call last):---------------------------| 9.0% Complete
File "/opt/anaconda3/lib/python3.7/gzip.py", line 374, in readline
return self._buffer.readline(size)
File "/opt/anaconda3/lib/python3.7/_compression.py", line 68, in readinto
data = self.read(len(byte_view))
File "/opt/anaconda3/lib/python3.7/gzip.py", line 463, in read
if not self._read_gzip_header():
File "/opt/anaconda3/lib/python3.7/gzip.py", line 411, in _read_gzip_header
raise OSError('Not a gzipped file (%r)' % magic)
OSError: Not a gzipped file (b'rv')
我已将代码修改如下,看起来运行良好,但不确定这是否是处理此类情况的最佳方法。 因为在某些情况下,程序似乎没有终止(我需要测试更多)。
for file in files:
try:
fin=gzip.open(file,'rb')
except:
continue
line=True
while line:
try:
line=fin.readline()
except:
continue
try:
temp=line.decode().split(",")
a,b,c,d=temp[0],int(temp[1]),int(temp[2]),int(temp[3])
except:
continue
【问题讨论】:
-
您至少可以使用
except Exception as ex: print(ex)来查看何时出现问题。您还可以计算异常并在 ie 之后退出此循环。 3 个例外。 -
这个问题似乎与读取损坏的 gzip 文件无关。您似乎在问如何读取多个文件并优雅地处理损坏的 gzip 文件。您能否编辑您的标题以反映这一点?