Что значит бэд зип файл

Обновлено: 05.07.2024

Довольно просто. Мы открываем zip-файл и один или два CSV-файла внутри zip-файла.

Что странно, если я запускаю это с большим zip-файлом (

13 МБ) и создаю экземпляр ZipFile из StringIO.StringIO или io.BytesIO (возможно, что угодно, кроме простого имени файла ? У меня были аналогичные проблемы в приложении Django при попытке создать ZipFile из TemporaryUploadedFile или даже файлового объекта, созданного путем вызова os.tmpfile() и shutil.copyfileobj() ) и открыть его ДВА файла csv, а не только один, то к концу обработки он не работает. Вот результат, который я вижу в системе Linux:

Между прочим, в моей системе OS X код не работает в тех же условиях, но по-другому. Вместо исключения BadZipfile он, кажется, читает поврежденные данные и очень запутывается.

Все это наводит на мысль, что я делаю в этом коде что-то, чего вы не должны делать - например: вызывать zipfile.open для файла, когда уже открыт другой файл в том же объекте zip-файла? Это не кажется проблемой при использовании ZipFile(filename) , но, возможно, это проблематично при передаче ZipFile файлового объекта из-за некоторых деталей реализации в модуле zipfile ?

Возможно, я что-то упустил в документации zipfile ? А может это еще не задокументировано? Или (что менее вероятно) ошибка в модуле zipfile ?

4 ответа

Возможно, я только что нашел проблему и решение, но, к сожалению, мне пришлось заменить модуль Python zipfile на собственный взломанный (здесь он называется myzipfile ).

Проблема стандартного модуля zipfile заключается в том, что при передаче файлового объекта (а не имени файла) он использует тот же переданный файловый объект для каждого вызова метода open . Это означает, что tell и seek вызываются для одного и того же файла, и поэтому попытка открыть несколько файлов в zip-файле приводит к тому, что позиция файла становится общей, и в результате возникают несколько вызовов open . в них наступают друг на друга. Напротив, при передаче имени файла open открывает новый файловый объект. Мое решение предназначено для случая, когда передается файловый объект, вместо того, чтобы использовать этот файловый объект напрямую, я создаю его копию.

Это изменение в zipfile устраняет проблемы, которые я видел:

Но я не знаю, повлияет ли это на zipfile иначе .

Примечание. Если ZipFile был создан путем передачи файлового объекта в качестве первого аргумента в конструктор, то объект, возвращаемый open() , использует указатель файла ZipFile. Под этим обстоятельства, объект, возвращенный open() , не должен использоваться после каких-либо дополнительных операций выполняются на объекте ZipFile. Если ZipFile был создан путем передачи строки ( filename) в качестве первого аргумента конструктора, тогда open() создаст новый файл объект, который будет храниться в ZipExtFile, что позволит ему работать независимо от ZipFile.

Может быть, вы открыли его на рабочем столе? Иногда это случалось со мной, и решение заключалось в том, чтобы просто запустить код, не открывая файлы вне сеанса python.

В моем случае это решило проблему:

То, что я сделал, это обновил инструменты настройки, затем повторно загрузил, и теперь он работает

ошибка сжатых zip папок что делать

В большинстве случаев рассматриваемый сбой возникает из-за некорректно загруженных данных – говоря по-простому, файл «побился» при скачивании или копировании с другого источника. Решение проблемы в таком варианте очевидно – скачайте его заново из интернета или скопируйте с флешки либо иного внешнего накопителя.

Нельзя исключать и ситуации, когда данные на ресурсе находятся в уже повреждённом виде – об этом явно свидетельствует повторение ошибки после новой загрузки. Столкнувшись с этим, следует поискать альтернативный источник файла, если такое возможно.

Способ 2: Использование стороннего ПО

В большинстве ОС семейства Windows присутствует встроенное решение для работы с ZIP-файлами, которое работает достаточно эффективно. Однако порой сжатые папки, которые запакованы нестандартными алгоритмами, этот инструмент распознать неспособен и воспринимает такие архивы как повреждённые. К счастью, альтернативных приложений для «окон» существует множество, и самые продвинутые из них берут в работу даже элементы с редкими средствами сжатия. Одним из таких решений является программа 7-Zip – с её помощью получится открыть практически любые архивные форматы. Разумеется, имеются и другие подобные решения, лучшие из которых рассмотрел один из наших авторов в специальной подборке.

Использовать сторонний архиватор для устранения ошибки сжатой ZIP-папки

Способ 3: Восстановление данных

В некоторых случаях «побитому» архиву можно вернуть работоспособность: нередко к сжатой папке добавляют информацию для восстановления. Использование этого метода покажем на основе популярного средства WinRAR.

  1. Откройте архиватор, с помощью него перейдите к местоположению проблемного ZIP.

Найти проблемный архив с помощью WinRAR для устранения ошибки сжатой ZIP-папки

Начать исправление архива в WinRAR для устранения ошибки сжатой ZIP-папки

Произвести исправление архива в WinRAR для устранения ошибки контрольной суммы сжатой ZIP-папки

Прогресс исправления архива в журнале WinRAR для устранения ошибки сжатой ZIP-папки

Способ 4: Проверка жёсткого диска и оперативной памяти

Если рассматриваемая проблема наблюдается со всеми, даже заведомо работоспособными архивами, дело, скорее всего, в аппаратной части компьютера: например, местоположением распаковки указан сбойный блок HDD или SSD. Кроме того, не лишним будет проверить и оперативную память: она берет непосредственное участие в разархивировании, и ошибки в процессе могут быть симптомами неполадок с ней. Воспользуйтесь инструкциями по ссылкам далее для диагностики комплектующих, и при наличии сбоев по возможности замените устройства.

Подробнее: Как проверить HDD, SSD и оперативную память

Проверить состояние оборудования для устранения ошибки сжатой ZIP-папки

Закрыть

Мы рады, что смогли помочь Вам в решении проблемы.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Закрыть

Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

1 - Можно ли как то распаковать архив с игнорированием битых кусков?
2 - Чем можно быстро скачать кусочек из архива (с побайтовым указанием откуда и докуда)?
3 - Чем можно наложить скачанный кусок на этот 9 гиговый блоб?



1 - Можно ли как то распаковать архив с игнорированием битых кусков?

сжатый файл? только до первого сбоя.

2 - Чем можно быстро скачать кусочек из архива (с побайтовым указанием откуда и докуда)?

man curl

-C/--continue-at <offset> Continue/Resume a previous file transfer at the given offset. The given offset is the exact number of bytes that will be skipped, counting from the beginning of the source file before it is transferred to the destination. If used with uploads, the FTP server command SIZE will not be used by curl.

Use "-C -" to tell curl to automatically find out where/how to resume the transfer. It then uses the given output/input files to figure that out.

If this option is used several times, the last one will be used.

размер вроде тоже как-то задаётся. А можно просто прервать CTRL+C. Хотя сервер такого может и не понять.

3 - Чем можно наложить скачанный кусок на этот 9 гиговый блоб?

man head, man tail

вырезаете нужные кусочки, а потом их склеиваете командой cat. Такое вот макраме.


Ну размер у него правильный, поэтому я сомневаюсь, что побилось много чего.

Тут тоже интересный вопрос, по какому именно куску высчитывается CRC, т.е по куску какого размера.


Ну размер у него правильный, поэтому я сомневаюсь, что побилось много чего.

ну во первых обновите unzip, ваша версия не умеет извлекать большие файлы. Умеет она начиная с 4.6.

Ну а потом копайте исходники, в поисках формата. ЕМНИП там он очень простой.


info zip

A companion program (unzip(1L)) unpacks zip archives. The zip and unzip(1L) programs can work with archives produced by PKZIP (supporting most PKZIP features up to PKZIP version 4.6), and PKZIP and PKUNZIP can work with archives produced by zip (with some exceptions, notably streamed archives, but recent changes in the zip file standard may facilitate better compatibility). zip version 3.0 is compatible with PKZIP 2.04 and also supports the Zip64 extensions of PKZIP 4.5 which allow archives as well as files to exceed the previous 2 GB limit (4 GB in some cases). zip also now supports bzip2 compression if the bzip2 library is included when zip is compiled. Note that PKUNZIP 1.10 can- not extract files produced by PKZIP 2.04 or zip 3.0. You must use PKUN- ZIP 2.04g or unzip 5.0p1 (or later versions) to extract them.

See the EXAMPLES section at the bottom of this page for examples of some typical uses of zip.

Large Archives and Zip64. zip automatically uses the Zip64 extensions when files larger than 4 GB are added to an archive, an archive con- taining Zip64 entries is updated (if the resulting archive still needs Zip64), the size of the archive will exceed 4 GB, or when the number of entries in the archive will exceed about 64K. Zip64 is also used for archives streamed from standard input as the size of such archives are not known in advance, but the option -fz- can be used to force zip to create PKZIP 2 compatible archives (as long as Zip64 extensions are not needed). You must use a PKZIP 4.5 compatible unzip, such as unzip 6.0 or later, to extract files using the Zip64 extensions.


Я обновил его, а вот лог не оттуда запостил.
Сейчас вот эта версия стоит:
UnZip 6.00 of 20 April 2009, by Info-ZIP. Maintained by C. Spieler. Send

Но архив все таки поврежден, к счастью он по размерам соответствует исходному.
Ну а так же я сейчас написал маленькую тулзу, которая подтвердило то, что ошибка(ки?) находятся исключительно где то в середине архива, т.к в концы архивов друг другу соответствуют.


Попроси кого-то перекачать нужный кусок на нормальном интернете


У меня интернет совершенно нормальный, да и я вообще сервером качаю. А вот на другой стороне с интернетом очень и очень плохо.

Вообще я уже перепроверил md5 архива (еле объяснил), получил я все совершенно правильно, а вот архив у меня не открывается.

7za l -slt:
Т.е 7z думает что в архиве и должно быть 2.6 гб, и все, при этом crc не совпадает.
Уже несколько часов мучаюсь, и не могу понять, почему на зондо-ос получился такой странный архив.


Размер архива, если что: 9599420683
Размер исходного файла 20 гигабайт.



Т.е 7z думает что в архиве и должно быть 2.6 гб, и все, при этом crc не совпадает.

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

в чём странность-то? Я не пойму, вы правильно скачали, и вам не открыть? Или?


Можно ли как то распаковать архив с игнорированием битых кусков?


md5 совпали, но архив битый? забавно.

Файл можно порезать с помощью split(1) у тебя локально и на удалённой машине, ну и сраввнить хэши кусков.


Архив не битый, он просто не правильно созданный (по идее).
У него в хедере размер меньше, чем должен быть на самом деле.


Его делали с рабочей VM (т.е. файл мог меняться)?


Size = 2604745216 - 2.6 гб
Packed Size = 1009485593 - 1 гб
А размер server.vdi должен быть 9гб, т.е его Packed Size должно быть более чем 9599420000


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


Ну ты понел. хотя наверное для этого и есть вайн, придется установить.
Я уже находил такой файлик, но увы не обнаружив сорцов отбросил этот вариант.


Программка 97-го года, кажется. Мне раньше помогала не раз с zip-архивами.



Ну так есть бонус - терминал.

Подготовь ей список команд и попроси выполнить. Делов.



скорее всего ничего не получится. Если действительно образ снят при рабочей VM. Распаковать-то распакуете (возможно), но не взлетит.



я-бы уже качал. Скорее всего получится каша из файловой системы, которая никак не вылечится.


Ну у меня появилась идея, что надо попробовать с хедером.
Качать все равно начинать вечером :)


rsync умеет исправлять битые файлы



Тред уже совсем не о том :)

Вопрос в том, что не ясно, почему хедеры в архиве не верные:
- или сделан архив не правильно
- либо сделан каким то странным софтом (не знаю чем он мог его сделать на маке)
- либо как то оказался поврежден


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

1 - Образно говоря, усть архив размером в 30300 байт в котором хранятся всего 3 файла. и выглядит это как то так:

общий заголовок
хедер_один запакованные_данные __разделитель__
хедер_два запакованные_данные __разделитель__
хедер_три запакованные_данные __разделитель__

Если в хедер первого файла прописать правильный его запакованный размер и правильный распакованный (а может и без него можно?) то он может распаковаться корректно.

Часто при скачивании архивированных файлов в интернете папка скачивается, в «Свойствах» отражается заявленный объем, но потом она не открывается или открывается с появлением пояснения, что «архив поврежден». Самой распространенной ошибкой пользователя бывает возникшее желание скачать файлы заново и снова попытаться их разархивировать.

Фото - что делать если возникает ошибка сжатых zip папок

Если уж вам попалась «битая» ссылка с поврежденными файлами, имеет смысл снова дать поисковику задание найти то, что вы искали, но скачать искомое уже из другого сисходника. Итак, что же делать, если возникает ошибка сжатых zip папок.

Что делать, чтобы избежать ошибки неправильно сжатых zip папок?

  • Скачайте бесплатно утилиту Hamster Zip Archiver, задав в поиске именно это название. Эта служба может работать с любыми архивами: Zip, WinZip, 7zip, WinRAR и другими. Если вы получили письмо со сжатыми прикрепленными файлами и не можете их открыть, скачайте эту програму, установите ее и откройте присланное с ее помощью.

Фото 2 - что делать если возникает ошибка сжатых zip папок

  • Архиватор 7-Zip, помимо высокой степени сжатия, имеет заданную опцию «самораспаковки», но только для файлов, в нем же и архивированных. Разархивировать он может 18 других форматов, являющихся наиболее распространенными. Разработчик сделал его функциональным для ОС Microsoft Windows, GNU/Linux, FreeBSD, DOS. При нажатии на ярлычок архиватора открывается менеджер 7-Zip. Там вы можете выбрать любую папку (либо открыть другой каталог для обнаружения любого файла) и «Добавить его к архиву» в контекстном меню, которое вызывается правой кнопкой мыши. Оспорить эффективность формата 7-Zip в состоянии разве что формат Rar, но недостаток последнего существенен – за него приходится платить.
  • Утилиту IZArc многие называют полиглотом. Скачивая ее по ссылкам, выданным поисковиком, будьте бдительны и вовремя ставьте или снимайте галочки – программа предлагает попутно установить множество других функционалов. С ее помощью можно конвертировать из одного формата в другой, можно зайти в «Настройки» и автоматизировать проверку на вирусы и, наконец, у нее есть функция исправления поврежденных архивов. Интерфейс достаточно прост и пошагово объяснит все требуемые действия.

Фото 3 - что делать если возникает ошибка сжатых zip папок

Стандартной утилитой для архивации файлов в системе Windows XP являются сжатые ZIP-папки. Если вам необходимо заархивировать что-либо для экономии места, имейте в виду, что mp3- файлы уже сжаты, поэтому архивируются не слишком успешно. Современные компьютеры обладают хорошим объемом памяти, лучше не рисковать хорошей музыкой или фото. Если жесткий диск перегружен, удалите что-то ненужное или сбросьте какие-то файлы на флешку. Еще один совет – скачивайте на свой комп только лучшие архиваторы!

Читайте также: