Почтовый индекс не работает - ошибка памяти - PullRequest
0 голосов
/ 27 июля 2011

Может ли кто-нибудь указать на любые ошибки, которые я мог включить в свой код.Я хотел сохранить код как можно более простым, но он не работает с ошибкой памяти.Некоторые сжатые файлы извлекаются нормально, хотя ...

import zipfile
import from os.path isdir, join, normpath, split
print "Unzipping data"
z = zipfile.ZipFile("C:\\Incoming\\MyZipFile.zip", 'r')
print z.namelist()
for each in z.namelist():
   if not each.endswith('/'):
      root, name = split(each)
      print name
      file(join("C:\\Incoming\\", name), 'wb').write(z.read(each))
z.close()

Фактическое сгенерированное сообщение об ошибке выглядит следующим образом:

Traceback (most recent call last):
File "C:\\Scripts\\Zip_import_test.py", line 30, in <module>
   file(join("C:\\Incoming\\", name), 'wb').write(zip.read(each))
File "C:\\Python25\lib\zipfile.py, line 501, in read
   bytes = dc.decompress(bytes)
Memory Error

Спасибо за любые предложения.Фрэнк Огиамьен

1 Ответ

4 голосов
/ 27 июля 2011

Не называйте это zip!Вы маскируете встроенное.

Кроме того, действительно ли zip.close() находится внутри вашей for петли?Это не должно быть.

Вы должны использовать метод extract объекта ZipFile, чтобы вам не приходилось считывать весь файл в память.

Вместо

file(join("C:\\Incoming\\", name), 'wb').write(zip.read(each))

do

zip.extract(each, "C:\\Incoming\\")

Редактировать: Это было добавлено в 2.6, как и extractall, если вы просто хотите извлечь все это в каталог.

Если выневозможно обновить, код в Как смоделировать ZipFile.open в Python 2.5? (в вопросе, а не в ответе) позволит вам использовать парсинг zip-файла и извлекать данные с помощью zlib, не читая ихв память.

...