2016-09-19 1 views
0

gzip으로 압축 될 수도 있고 그렇지 않을 수도있는 파이썬 파일을 어떻게 읽습니까? .xml.gz 파일이 아닌 .xml 파일과스트림의 투명한 압축 해제

내 현재 코드

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

작품 :

... 
    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에 대한 대답은 내 문제를 해결할 수 있지만 추가 코드가 필요없는 패키지 솔루션을 찾고 있습니다.

+0

@Flint : 예, 그 질문에 대한 "배터리 포함"해결책을 찾고 있습니다. – krlmlr

+1

내장 된 것은 없지만, 주어진 파일을 제대로 열려면 8-9 줄의 코드를 사용하면 어떨까요? – martineau

+0

@martineau : 답변으로 받아 들일 것입니다. 바라건대 이것은 8-9 줄의 코드 일지라도 패키지 솔루션을 구현할 인센티브를 줄 수 있기를 바랍니다. (bzip2? 마술 헤더 지원? 스트림 지원? ...) – krlmlr

답변

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 

은 또한 다른 파일 형식을 지원하도록 확장 할 수 있습니다.