流的透明减压

时间:2016-09-19 14:13:12

标签: python compression gzip

如何在Python中读取可能是或不是gzip压缩的文件?

我当前的代码

with gzip.open("file.xml") as f:
    xml.sax.parse(f, reader)

适用于.xml.gz个文件,但不适用于.xml个文件:

...
  File "/usr/lib/python3.5/gzip.py", line 409, in _read_gzip_header
    raise OSError('Not a gzipped file (%r)' % magic)

是否有内置可导入替代gzip.open()调用,该调用始终根据文件内容和/或文件扩展名返回未压缩的流?

related question的答案可以解决我的问题,但我正在寻找一个不涉及任何额外代码的打包解决方案。

1 个答案:

答案 0 :(得分:1)

只需使用此answer中定义的函数来解决相关问题:

import gzip

def opener(filename):
    f = open(filename, 'rb')
    if f.read(2) == '\x1f\x8b':
        f.seek(0)
        return gzip.GzipFile(fileobj=f)
    else:
        f.seek(0)
        return f

您也可以将其扩展为支持其他文件格式。