2012-11-18 5 views
2

로 파일 (파이썬) :열 수 없습니다 BZ2 압축 나는 BZ2 압축기 개체의 파일 BZ2-압축하는 일부 코드를 작성했습니다 정상 아카이브 매니저

def compressFile(file_name, new_name):  
    comp = bz2.BZ2Compressor() 
    comFile = open(new_name, "wb") 
    oldFile = open(file_name, "rb") 
    while True: 
     data = oldFile.read(1024*1024) 
     if(len(data) == 0): 
      break 
     compressed = comp.compress(data) 
     comFile.write(compressed) 
    comp.flush() 
    comFile.close() 

를 나는 얻지 않는다 오류가 발생하여 파일이 작성되었지만 아카이브 관리자로 열 때 비 특정 오류가 발생합니다. 내 실수를 찾을 수 없으며이 모듈의 문서화가 잘되어 있지 않습니다.

+0

당신이지고 어떤 오류? – georg

+0

"파일을 추출하는 동안 오류가 발생했습니다." – Eknoes

+0

실제로 bzip이 설치되어 있습니까? 그것은 커맨드 라인에서 작동합니까? – georg

답변

5

BZ2Compressor을 사용하면 compress()에 전화 할 때 데이터가 청크로 표시되며 flush()으로 전화 할 때만 데이터를 가져올 가능성이 있습니다.

이 같은 함수를 변경하는 경우 그것은 작동합니다 :

def compressFile(file_name, new_name):  
    comp = bz2.BZ2Compressor() 
    comFile = open(new_name, "wb") 
    oldFile = open(file_name, "rb") 
    while True: 
     data = oldFile.read(1024*1024) 
     if(len(data) == 0): 
      break 
     comFile.write(comp.compress(data)) 
    comFile.write(comp.flush()) 
    comFile.close() 
+0

불행히도, get ValueError :이 객체는 이미 플러시되었습니다. ' – Eknoes

+0

죄송합니다. 내 대답을 변경했습니다. 지금 일해야합니다. – mata

+0

예, 완벽하게 작동합니다. 대단히 감사합니다! – Eknoes

관련 문제