2012-02-24 2 views
0

Я использую http://docs.python.org/library/zipfile.html для сжатия файла в zip. Он работает хорошо, но при извлечении этого файла через мой ubuntu (не в python, просто щелкнув правой кнопкой мыши файл, а затем «Извлечь здесь») файл усечен. Мой исходный файл имеет ~ 167kb, извлеченный через ubuntu ~ 164kb (это файл csv, поэтому я пропускаю несколько строк из конца файла).Проблема с извлечением библиотеки Zipfile

Любые предложения?

Edit:

Мой код выглядит следующим образом:

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

Где ЭЛ некоторые CSV-файл.

Редактировать2: Похоже, что при записи в zipfile некоторые данные теряются.

+0

Вы уверены, что закрыли файл? (Если вы не вызываете закрытие, документация предупреждает, что некоторые важные записи могут быть опущены) –

+0

возможно, попробуйте 'wb' вместо 'w' для режима? –

+0

Я - пользователь linux. Поэтому, когда я кладу 'wb' вместо 'w', я получаю RuntimeError. – Drachenfels

ответ

0

Некоторые предложения:

(1) Вы называете testzip но игнорировать возвращаемое значение. Это может испортиться, если архив пуст (как в этом случае). Удалите вызов testzip.

(2) Проверьте целостность созданного файла другими способами, например. (a) linux_zipfile_executable -t your_created_archive.zip (b) короткий скрипт Python с использованием testzip. Попробуйте другие средства извлечения.

(3) Игнорировать mode='wb' толкатели; это относится только к файлам, открытым со встроенным open. Как говорят документы zipfile, единственными допустимыми режимами являются r, w и a. Остальное: RuntimeError: ZipFile() requires mode "r", "w", or "a". Код zipfile на самом деле использует флаг b, когда он открывает архив, используя встроенный open.

(4) Проверьте, что в попытке найти вашу проблему вы фактически сравниваете правильную пару файлов csv.

(5) Отправьте 3 файла (ввод, вывод и .zip) в Интернете где-нибудь.

+0

По правде говоря, это не проблема с zipfile, это была проблема с csv и его автором. Я делал некоторую операцию для только что созданного файла csv, не закрывая указатель файла, который был передан в csv.writer. Закрывая его, прежде чем делать фактическое сжатие, решена моя проблема. – Drachenfels

Смежные вопросы