Форум сайта python.su
0
Привет, всем!
Пытаюсь прочесть файл в архиве, который находится в другом архиве (матрешка по своему). Ниже на картинке содержание архива. Документ, который нужно прочесть - “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'
Прикреплённый файлы:
archive.zip (5,8 KБ)
Офлайн
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)
Офлайн
857
DianaЛучше распаковать архив во временную директорию на диске. И так можно распаковывать и распаковывать, пока не будет получен нужный файл. А городить огород постоянно не получиться, так как когда-нибудь и десятикратное вложение появится.
Как это лучше всего сделать?
Офлайн
0
py.user.nextСпасибо за совет. Как лучше свего это сделать? Распаковать временно (получается дважды), а потом и удалить его.
Офлайн
0
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()
Офлайн
857
DianaПрикрепил пример.
Как лучше свего это сделать? Распаковать временно (получается дважды), а потом и удалить его.
[guest@localhost subarch]$ ./subarch.py
File text:
Привет!
End.
[guest@localhost subarch]$
Отредактировано py.user.next (Апрель 20, 2022 15:01:41)
Прикреплённый файлы:
subarch.tar.gz (6,7 KБ)
Офлайн
Diana
Спасибо. Ваш код действительно работает, правда теперь проблема с чтением .xml файла. Пробовала сделать следующим образом, но не работает.
tree = ET.parse(nested_zip.open("document.xml")) root = tree.getroot()
root = ET.fromstring(nested_zip.open("document.xml").read())
Отредактировано snakeous (Апрель 22, 2022 17:52:22)
Прикреплённый файлы:
subarch_xml.tar.gz (6,7 KБ)
Офлайн