2017-02-07 26 views
2

나는 나는 다음과 같은 명령을 사용하여 리눅스에서 압축을 해제 할 수있는 파일을 가지고? 내가 python3과 tar 파일 모듈을 사용하여 다음을 수행하는 경우 : ReadError ('잘못된 헤더') : 데이터 만 들어 있지만 파일 이름은없는 파이썬으로 xz 파일의 압축을 푸는 방법은 무엇입니까? 나도 같은 사용하여 파이썬을 할 수있는 방법</p> <pre><code>unxz <file.xz> file.txt </code></pre> <p>:

import sys 
import tarfile 
try: 
    with tarfile.open('temp.xz', 'r:xz') as t: 
     t.extract() 
except Exception as e: 
    print("Error:", e.strerror) 

나는 예외를 얻을. 그래서 분명히 xz 파일에 존재하지 않는 파일이나 디렉토리 정보를 기대합니다.

그럼 어떻게 헤더 정보없이 파일을 압축 해제 할 수 있습니까?

답변

3

tarfile 모듈은 ... 오류 ... 타르 파일 전용입니다. 여기에있는 것은 하나가 아닙니다.


XZ 지원은 Python 3.3의 LZMA 모듈에서 사용할 수 있습니다. Python 2.x에서는 backports.lzma이 필요합니다.

try: 
    import lzma 
except ImportError: 
    from backports import lzma 

print lzma.open('file.xz').read() 
+0

우수합니다. 완벽하게 작동합니다. –

+0

이것은 바이너리 형식의 데이터를 제공합니다. 전체 파일을 압축 해제하는 빠른 방법이 있습니까? 예를 들어 "test.txt.xz"파일이 있고 "test.txt"를 가져 오는 명령이 필요합니다. 한 가지 방법은이 방법으로 데이터를 utf-8로 변환하는 것입니다 :'binary_data_buffer = lzma.open ('test.txt.xz'). read()','string_buffer = binary_data_buffer.decode ('utf -8 ')'마지막으로 파일에 기록합니다. 그러나 나는 이것을하기위한보다 우아한 방법이 있다고 확신한다. – Pete

+1

@Pete,'lzma.open ('test.txt.xz'). read(). decode ('utf-8')'가 너무 많아요? 즉,'lzma.open ('test.txt.xz', mode = 'rt', encoding = 'utf-8')'을 전달하여 멀티 바이트 문자 디코딩을 즉시 사용할 수 있습니다. –