【发布时间】:2013-05-29 11:58:12
【问题描述】:
我似乎记得 Python gzip 模块以前允许您透明地读取非 gzip 文件。这非常有用,因为它允许读取输入文件,无论它是否经过 gzip 压缩。您根本不必担心。
现在,我得到一个 IOError 异常(在 Python 2.7.5 中):
Traceback (most recent call last):
File "tst.py", line 14, in <module>
rec = fd.readline()
File "/sw/lib/python2.7/gzip.py", line 455, in readline
c = self.read(readsize)
File "/sw/lib/python2.7/gzip.py", line 261, in read
self._read(readsize)
File "/sw/lib/python2.7/gzip.py", line 296, in _read
self._read_gzip_header()
File "/sw/lib/python2.7/gzip.py", line 190, in _read_gzip_header
raise IOError, 'Not a gzipped file'
IOError: Not a gzipped file
如果有人有巧妙的技巧,我很想听听。是的,我知道如何捕获异常,但是我发现先读取一行,然后关闭文件并再次打开它相当笨拙。
【问题讨论】:
-
你确定你没记错吗?从 2.4 开始,我无法在任何版本中获得这种行为,并且由于 2.0! 之后的文档中没有提到这种行为!而且我也不希望 gzip 读取未压缩的文件。
-
你不能直接打开文件,将它传递给 gzip,捕获异常,然后处理已经打开的文件吗?
-
我想正确理解你。请不要冒犯。为什么要使用 gzip 打开未抓取的文件?对不起,但这对我来说毫无意义。请澄清您的问题。
-
您希望为 gzip 或非 gzip 压缩数据使用通用打开器的原因是,如果您正在处理任意 gzip 或未 gzip 压缩的混合文件组。但是,滑坡问题是——如果你这样做,你会如何处理 bzip2 或 rar 文件或任何不属于 gzip/not-gzip 类别的文件),因为很多东西都不是压缩”。