Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中从HTTP响应中提取Zip_Python_Python 3.x_Http_Https - Fatal编程技术网

在Python中从HTTP响应中提取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是邮政编码 我正在寻找以下内容: /

我能够从HTTPs响应中获取zip,并使用以下代码片段将其存储在特定文件夹中:

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()
uses
namelist()