【问题标题】:Get path from open zip file in Python从 Python 中打开的 zip 文件中获取路径
【发布时间】:2019-05-23 00:34:08
【问题描述】:

所以我正在使用的代码从这样的 zip 中解压缩示例文件:

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

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

我需要使用FileResponse,它需要一个文件路径。 因此,在检查如何在 Python 中检索打开文件的路径时,解决方案似乎是(根据Get path from open file in Python):

myfile.name

但不幸的是,这不适用于ZipExtFile。它只是返回文件名而不是这个解压文件的存储路径。

如何从myfile获取路径?
还是有其他方法可以在不更改原始 zip 文件的情况下获取文件及其路径?

【问题讨论】:

    标签: python zip unzip


    【解决方案1】:

    这里的问题是,不是像在 GUI 中那样打开 zip 文件并提取文件,而是实际上打开文件的内容并将其读取为 io.BufferedIOBase 类格式。

    如果您打算使用 zip 文件中的其中一个文件,您需要将其解压缩,或者从您读入变量的内容创建一个新文件。我更喜欢第一个选项:

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

    然后您可以将 path_to_extracted_file 传递给 FileResponse。这将使您的原始 zip 文件保持完整。

    【讨论】:

      【解决方案2】:

      extract 方法返回归一化路径

      from zipfile import ZipFile
      
      with ZipFile('spam.zip') as z:
          filepath = z.extract('eggs.txt')
      

      【讨论】:

      • 好答案,我实际上更喜欢您的代码,但另一个答案包含更多信息,尤其是关于保持原始 zip 文件完整的信息。这就是我接受另一个答案的原因。
      猜你喜欢
      • 1970-01-01
      • 2011-07-13
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多