在Python中从HTTP响应中提取Zip
我能够从HTTPs响应中获取zip,并使用以下代码片段将其存储在特定文件夹中:在Python中从HTTP响应中提取Zip,python,python-3.x,http,https,Python,Python 3.x,Http,Https,我能够从HTTPs响应中获取zip,并使用以下代码片段将其存储在特定文件夹中: z = zipfile.ZipFile(io.BytesIO(statement_resp.content)) z.extractall("/pathtostore") 但是,在/pathtostore中,zip文件会以一些随机名称提取出来。有没有办法控制解压时创建的zip文件的名称 目前,zip解压缩后,目录结构如下: /pathtostore/Zaxyzz -->Zaxyzz是邮政编码 我正在寻找以下内容: /
z = zipfile.ZipFile(io.BytesIO(statement_resp.content))
z.extractall("/pathtostore")
但是,在/pathtostore
中,zip文件会以一些随机名称提取出来。有没有办法控制解压时创建的zip文件的名称
目前,zip解压缩后,目录结构如下:
/pathtostore/Zaxyzz
-->Zaxyzz是邮政编码
我正在寻找以下内容:
/pathtostore/1234_2020_03_02
-->1234_2020_03_02(cid_curdate)是我想要的邮政编码
PS:我无法读取zip并将其重命名,因为在
/pathtostore
中可能存在多个zip。您可以获取名称z.namelist()
,并分别读取每个文件z.read()
,然后使用标准open()
,write()
,close()
最低限度的例子
如果zipfile有文件夹,则可能需要更多代码
import zipfile
import datetime
import os
z = zipfile.ZipFile('input.zip')
folder = '/pathtostore'
os.makedirs(folder, exist_ok=True)
today = datetime.date.today().strftime('%Y_%m_%d')
cid = 0
for old_name in z.namelist():
cid += 1
new_name = os.path.join(folder, '{:04}_{}'.format(cid, today))
print(old_name, '->', new_name)
data = z.read(old_name)
with open(new_name, 'wb') as fh:
fh.write(data)
您可以读取zipfile的ZipInfo结构,并修改其
filename
属性以进行写入
from pathlib import Path
z = zipfile.ZipFile(io.BytesIO(statement_resp.content))
for info in z.getinfo():
# implement your extraction policy here. Remove root
# path name and add our own
zip_path = Path(z.filename)
z.filename = str(Path("1234_2020_03_02").joinpath(*zip_path.parts[1:]))
x.extract(info)
data=zip.read(旧名称)
和fh=open(新名称,'w')
fh.write()
fh.close()
?@furas:提取zip时,我不知道它的名称。由于/pathtostore中可能有多个zip目录,您将如何读取特定的zip目录?也许您应该首先阅读文档,顺便说一句:在中,您甚至可以看到extractall()
usesnamelist()