Найти - Пользователи
Полная версия: Открыть архив внутри архива
Начало » Python для новичков » Открыть архив внутри архива
1
Diana
Привет, всем!

Пытаюсь прочесть файл в архиве, который находится в другом архиве (матрешка по своему). Ниже на картинке содержание архива. Документ, который нужно прочесть - “document.txt”.



Как это лучше всего сделать? Пыталась использовать след. код, но ничего не работает:

 import zipfile
with zipfile.ZipFile("archive.zip", mode="r") as archive:
    with zipfile.ZipFile("archive2.zip", mode="r") as archive2:
        text = archive2.read("document.txt")
        print(text) #FileNotFountError: [Errno 2] No such file or directory: 'archive2.zip'
snakeous
Diana
Как это лучше всего сделать? Пыталась использовать след. код, но ничего не работает:
 import io
import zipfile
with zipfile.ZipFile('archive.zip') as z:
    with z.open('archive2.zip') as z2:
        with zipfile.ZipFile(io.BytesIO(z2.read())) as nested_zip:
            text = nested_zip.open('document.txt').read()
            print(text)
py.user.next
Diana
Как это лучше всего сделать?
Лучше распаковать архив во временную директорию на диске. И так можно распаковывать и распаковывать, пока не будет получен нужный файл. А городить огород постоянно не получиться, так как когда-нибудь и десятикратное вложение появится.
Diana
py.user.next
Спасибо за совет. Как лучше свего это сделать? Распаковать временно (получается дважды), а потом и удалить его.
Diana
snakeous
Спасибо. Ваш код действительно работает, правда теперь проблема с чтением .xml файла. Пробовала сделать следующим образом, но не работает.

 import io
import zipfile
import xml.etree.ElementTree as ET
with zipfile.ZipFile('archive.zip') as z:
    with z.open('archive2.zip') as z2:
        with zipfile.ZipFile(io.BytesIO(z2.read())) as nested_zip:
            tree = ET.parse(nested_zip.open("document.xml"))
            root = tree.getroot()
py.user.next
Diana
Как лучше свего это сделать? Распаковать временно (получается дважды), а потом и удалить его.
Прикрепил пример.
[guest@localhost subarch]$ ./subarch.py 
File text:
Привет!

End.
[guest@localhost subarch]$
snakeous
Diana
Спасибо. Ваш код действительно работает, правда теперь проблема с чтением .xml файла. Пробовала сделать следующим образом, но не работает.
 tree = ET.parse(nested_zip.open("document.xml"))
root = tree.getroot()
заменить на
 root = ET.fromstring(nested_zip.open("document.xml").read())
Также по вложении код от py.user.next, адаптированный для XML.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB