Получить путь из открытого почтового файла в Python - PullRequest
0 голосов
/ 22 мая 2019

Итак, код, с которым я работаю, восстанавливает пример файла из zip-файла:

with ZipFile('spam.zip') as myzip:
    myfile = myzip.open('eggs.txt')

return myfile  # <class 'zipfile.ZipExtFile(io.BufferedIOBase)'>

Мне нужно работать с FileResponse, который ожидает путь к файлу. Таким образом, при проверке того, как извлечь путь к открытому файлу в Python, решения выглядят так (согласно Получить путь из открытого файла в Python ):

myfile.name

Но, к сожалению, это не работает с ZipExtFile. Он просто возвращает имя файла вместо пути к месту хранения этого распакованного файла.

Как я могу получить путь от myfile?
Или есть другой способ получить файл и его путь без изменения исходного zip-файла?

Ответы [ 2 ]

1 голос
/ 22 мая 2019

Проблема здесь в том, что вместо того, чтобы открывать zip-файл и извлекать файл, как вы это делаете в графическом интерфейсе, вы фактически открываете и считываете содержимое файла в формат класса io.BufferedIOBase.

Если вы планируете использовать один из файлов внутри zip-файла, вам нужно либо извлечь его, либо создать новый файл из содержимого, которое вы прочитали в свою переменную.Я бы предпочел первый вариант:

myzip = zipfile.ZipFile('spam.zip')
path_to_extracted_file = myzip.extract('eggs.txt')

Тогда вы можете передать path_to_extracted_file в FileResponse.Это сохранит ваш оригинальный zip-файл без изменений.

1 голос
/ 22 мая 2019

Метод извлечения возвращает нормализованный путь

from zipfile import ZipFile

with ZipFile('spam.zip') as z:
    filepath = z.extract('eggs.txt')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...