2012-02-24 3 views
0

http://docs.python.org/library/zipfile.html을 사용하여 파일을 압축합니다. 그것은 잘 작동하지만 내 우분투 (파이썬 아니, 그냥 바로 파일을 누른 다음 '여기에 압축 풀기') 파일을 추출 할 때 파일이 잘 렸습니다. 내 원래 파일 ~ 167kb 우분투 통해 추출한 ~ 164kb (그것은 CSV 파일이므로 파일 끝에서 몇 줄을 놓치지).Zipfile 라이브러리 추출 문제

제안 사항?

편집 : 엘 일부 CSV 파일입니다

try: 
    fp2 = zipfile.ZipFile(el.replace('.csv', '.zip'), 'w', 
      zipfile.ZIP_DEFLATED) 
    fp2.testzip() 
    fp2.write(el) 
finally: 
    fp2.close() 

을 다음과 같이

내 코드가 보인다.

Edit2 : zip 파일에 쓰는 동안 일부 데이터가 손실 된 것처럼 보입니다.

+0

정말 파일을 닫았습니까? (가까이에 전화하지 않으면 설명서에 몇 가지 필수 기록이 남을 수 있다고 경고 함) –

+0

모드로 'w'대신 'wb'를 시도할까요? –

+0

저는 리눅스 사용자입니다. 그래서 'w'대신 'wb'를 넣으면 RuntimeError가 발생합니다. – Drachenfels

답변

0

몇 가지 제안 :

(1) 전화 testzip하지만 반환 값을 무시합니다. 아카이브가 비어 있다면 (이 경우처럼) 상황이 엉망이 될 수 있습니다. testzip로 전화를 제거하십시오.

(2) 다른 수단으로 작성된 파일의 무결성을 테스트합니다. (a) linux_zipfile_executable -t your_created_archive.zip (b) testzip을 사용하는 짧은 파이썬 스크립트. 다른 추출 방법을 시도하십시오.

(3) mode='wb' 푸시 프로그램을 무시하십시오. 내장 된 open으로 열린 파일에만 해당됩니다. zipfile 문서에서 말하는 바와 같이 허용되는 모드는 r, wa입니다. 기타 : RuntimeError: ZipFile() requires mode "r", "w", or "a". zipfile 코드는 실제로 open을 사용하여 아카이브 파일을 열 때 b 플래그를 사용합니다.

(4) 문제를 찾기 위해 혼란 스러울 때 실제로 정확한 csv 파일 쌍을 비교하고 있는지 확인하십시오.

(5) 3 개의 파일 (입력, 출력 및 .zip)을 웹에 게시하십시오.

+0

진실은 zipfile에서 문제가되지 않는다는 것입니다. 그것은 csv에서 문제 였고 작성자입니다. csv.writer에 전달 된 파일 포인터를 닫지 않고 새로 생성 된 CSV 파일에 대해 일부 작업을 수행하고있었습니다. 실제 압축을하기 전에 그것을 닫으면 광산 문제가 해결됩니다. – Drachenfels