Python

Можно ли прочитать содержимое zip архива с сайта (по сети) не загружая его целиком?

Всем спасибо, уже нашла, что искала
github.com/gtsystem/python-remotezip
Теоретически да.
На практике слишком заморочено.

Некоторые веб серверы могут отдавать часть файла при специально сформированном запросе. ZIP файл состоит из секций. Тебе понадобятся секция со словарем и последняя секция. Распаковав последнюю секцию словарем ты получишь содержание архива.
Владик Мещеряков
Владик Мещеряков
12 592
Лучший ответ
Нельзя
В принципе да, но не всё содержимое, ессно. Список файлов (без папок) например. Я такое делаю коммандерным просмотрщиком и глазами (просто расширения там не zip).
А;
Алексей ;-)
91 214
Что за ересь... Для просмотра файл в любом случае загружается. В вариантах: Загрузка для сохранения, загрузка для просмотра во временный файл, загрузка "кусками" как потоковое видео. но загрузка по любас будет.
| Самсонов
| Самсонов
19 176
Егор Белогубов cмотри дополенние к вопросу
формат zip давно известен, индексы файлов внутри архива хранятся в самом конце zip файла,
нужно, всего лишь запросить сервер с http заголовком Range, не помню как там правильно....
Под содержанием вы понимаете список файлов и каталогов внутри архива с датами размерами, правильно? Если кратко, это сложно, но возможно, и то далеко не всегда.

Для формата ZIP структура каталога располагается в конце файла и начинается с специального "магического числа". Перед ним есть фрагменты с описаниями файлов и самими сжатыми данными.
То есть сетевой протокол получения файла должен позволять получить кусочек хвоста файла, а потом придётся декодировать эту "папку" и докачивать дополнительные фрагменты из разных частей ZIP файла, чтобы получить данные о каждом содержащемся файле. Для протокола HTTP, например, это возможно только если сервер поддерживает так называемые range requests, а через FTP такого сделать нельзя.
Виталий Ионов
Виталий Ионов
11 112
Егор Белогубов можно же ведь наугад узнать размер фала целиком, и взять у него 10 процентов с конца?
Скорее всего нет.
ИГ
Илья Горнов
6 490
Читая что-то вы хотите это увидеть у себя и так или иначе это что-то передаете по сети т. е. загружаете. Таким образом общий ответ нет

Однако не стоит забывать что любой архиватор при простом открытии и/или перемещении по архиву читает его не целиком а лишь его структуру (заголовок, то как расположены файлы в архиве) этот же принцип и у файловой ситсемы (любой) иначе доступ к вашим терабайтам инфы осуществлялся бы ОЧЕНЬ долго. Архив это та же файловая система внутри файла (своего рода виртуальный диск) но с оговорками и в зависимости от типа/метода архивирования (zip это лишь контейнер/красивая обертка).
Исходя из этого возможна не полная загрузка архива, но тогда повышается нагрузка на сервер ведь ОН должен будет открывать и читать структуру архива.
Если хотите это реализовывать - вам придется либо тесно знакомится со сторонними библиотеками архиваторов либо самому писать подобный код и курить спецификации форматов архивирования
Егор Белогубов cмотри дополенние к вопросу
формат zip давно известен, индексы файлов внутри архива хранятся в самом конце zip файла,
нужно, всего лишь запросить сервер с http заголовком Range, не помню как там правильно....
github.com/gtsystem/python-remotezip