使用 python zipfile 提取 zip 子文件夹中的文件

Posted

技术标签:

【中文标题】使用 python zipfile 提取 zip 子文件夹中的文件【英文标题】:extract files inside zip sub folders with python zipfile 【发布时间】:2016-10-12 21:55:04 【问题描述】:

我有一个包含文件和子 zip 文件夹的 zip 文件夹。我能够读取放置在父文件夹中的文件,但我如何才能访问子 zip 文件夹中的文件?这是我获取父文件夹中文件的代码

from io import BytesIO
import pandas as pd
import requests
import zipfile
url1 = 'https://www.someurl.com/abc.zip'
r = requests.get(url1)
z = zipfile.ZipFile(BytesIO(r.content))    
temp  = pd.read_csv(z.open('mno.csv')

我的问题是,如果可以说,我有一个子文件夹

xyz.zip 

包含文件

pqr.csv

我如何阅读这个文件

【问题讨论】:

【参考方案1】:

使用另一个BytesIO 对象打开包含的压缩文件

from io import BytesIO
import pandas as pd
import requests
import zipfile

# Read outer zip file
url1 = 'https://www.someurl.com/abc.zip'
r = requests.get(url1)
z = zipfile.ZipFile(BytesIO(r.content))

# lets say the archive is:
#     zippped_folder/pqr.zip (which contains pqr.csv)

# Read contained zip file
pqr_zip = zipfile.ZipFile(BytesIO(z.open('zippped_folder/pqr.zip')))
temp = pd.read_csv(pqr_zip.open('prq.csv'))

【讨论】:

【参考方案2】:

在尝试了一些排列组合之后,我发现了这段代码的问题

zz = zipfile.ZipFile(z.namelist()[i])
temp2  = pd.read_csv(zz.open('pqr.csv'))
# where i is the index position of the child zip folder in the namelist() list. In this case, the 'xyz.zip' folder

# for eg if the 'xyz.zip' folder was third in the list, the command would be:
zz = zipfile.ZipFile(z.namelist()[2])

或者,如果不知道索引位置,也可以这样实现:

zz  = zipfile.ZipFile(z.namelist()[z.namelist().index('xyz.zip')])

【讨论】:

以上是关于使用 python zipfile 提取 zip 子文件夹中的文件的主要内容,如果未能解决你的问题,请参考以下文章

怎么从zip里提取文件 Python

使用 python zipfile 提取 zip 子文件夹中的文件

在python中提取.zip

如何使用 Python 的 zipfile 模块对 ZIP 文件中的文件设置权限(属性)?

python在通过crontab运行时不提取zipfile

使用python ZIPFile提取gz文件[重复]