Плохая ошибка магического числа с модулем ZipFile в Python
Я использую Python 2.7 В Windows 7 (64 бит). Когда я пытаюсь распаковать zip-файл с модулем ZipFile, я получаю следующую ошибку: -
Traceback (most recent call last):
File "unzip.py", line 8, in <module>
z.extract(name)
File "C:Python27libzipfile.py", line 950, in extract
return self._extract_member(member, path, pwd)
File "C:Python27libzipfile.py", line 993, in _extract_member
source = self.open(member, pwd=pwd)
File "C:Python27libzipfile.py", line 897, in open
raise BadZipfile, "Bad magic number for file header"
zipfile.BadZipfile: Bad magic number for file header
WinRAR может извлечь файл, который я пытаюсь извлечь просто отлично.
Вот код, который я использовал для извлечения файлов из myzip.zip
from zipfile import ZipFile
z = ZipFile('myzip.zip') //myzip.zip contains just one file, a password protected pdf
for name in z.namelist():
z.extract(name)
этот код отлично работает для многих других zip-файлов, которые я создал с помощью WinRAR, но myzip.zip
Я попытался прокомментировать следующие строки в Python27Libzipfile.py
:-
if fheader[0:4] != stringFileHeader:
raise BadZipfile, "Bad magic number for file header"
но это не очень помогло. Запуск моего кода с этим в действительности, я получаю некоторый дамп на моей оболочке.
2 ответов
правильные ZIP-файлы всегда имеют "\x50\x4B\x03\x04" в начале. Вы можете проверить, действительно ли файл ZIP-файл с этим кодом:
with open('/path/to/file', 'rb') as MyZip:
print(MyZip.read(4))
он будет печатать заголовок файла, чтобы вы могли проверить.
обновление Странно, testzip () и все остальные функции работают хорошо. Вы пробовали такой код?
with zipfile.GzipFile('/path/to/file') as Zip:
for ZipMember in Zip.infolist():
Zip.extract(ZipMember, path='/dir/where/to/extract', pwd='your-password')
убедитесь, что вы действительно открываете ZIP-файл, а не, например, RAR-файл с именем a .расширение zip. Правильные zip-файлы имеют заголовок, который в этом случае не найден.
на zipfile
модуль может открывать только zip-файлы. WinRAR также может открывать другие форматы, и он, вероятно, игнорирует имя файла и смотрит только на сам файл.