2014-11-07 2 views
0

파이썬 gzip 라이브러리를 사용하여 파일을 확장하고 있으며 일부는 손상되었습니다.파이썬에서 손상된 gzip 파일에서 데이터를 추출하는 방법

오류 -3 압축을 푸는 동안 : 유효하지 않은 블록 타입

는 파일의 깨진 지점 전에 모든 데이터를 읽을하거나, 어떻게 든 깨진 점 건너 뛰고 읽을 수있는 정확한 오류는 이것이다 전후에 뭐야? 압축 된 파일은 기본적으로 텍스트 줄이며 최대한 많은 데이터를 복구하려고합니다.

감사

+1

당신은'os.system을 사용하려고 할 수 있습니다 ('풀어서 밖으로')', 그것은 불량 섹터 이전 데이터를 추출한다. 그러나 불량 섹터 이후에 데이터를 추출하십시오. – serkos

+1

'gzip '[http://www.gzip.org/recover.txt]의 저자. @serkos가 위에서 제시 한대로 손상되기 전에 데이터를 복구하는 것이 좋습니다. 이후에 데이터를 복구하는 것이 어려워 보이며, 제안 된 방법은 찾고있는 파이썬 솔루션이 아닌 gzip의 'c'소스를 편집하는 것입니다. – Tony

답변

1

당신은 나쁜 블록 당신이 최대 압축 해제 데이터를 제공합니다 한 번에 한 조각을 압축 해제하는 Python zlib interface를 사용할 수 있습니다. 손상이 발생할 가능성이 높기 때문에 압축 해제 된 데이터의 끝에있는 일부 금액이 손상 될 수 있습니다.

gzip 파일이 특별히 복구 지점을 준비하지 않은 경우 오류 발생 후 데이터를 복구하는 것은 거의 불가능합니다 (질문에 대한 설명 링크 참조). gzip 유틸리티 자체는 그렇게하지 않습니다.

2

바라건대 다른 사람이 유용를 찾습니다

# http://stackoverflow.com/questions/2423866/python-decompressing-gzip-chunk-by-chunk 
# http://stackoverflow.com/questions/3122145/zlib-error-error-3-while-decompressing-incorrect-header-check/22310760 
def read_corrupted_file(filename, CHUNKSIZE=1024): 
    d = zlib.decompressobj(zlib.MAX_WBITS | 32) 
    with open(filename, 'rb') as f: 
     result_str = '' 
     buffer=f.read(CHUNKSIZE) 
     try: 
      while buffer: 
       result_str += d.decompress(buffer) 
       buffer=f.read(CHUNKSIZE) 
     except Exception as e: 
      print 'Error: %s -> %s' % (filename, e.message) 
     return result_str 
관련 문제