首页 > 解决方案 > 下载并解压 Zip 文件

问题描述

我想从一个 url 下载一个 zip 文件,但我不想暂时保存它,因为我知道将 zip 文件下载并提取到某个地方的唯一方法是创建一个空的 zip 文件,将在其中粘贴下载的 zip 内容然后,将其解压缩到正确的文件夹中。但我想下载和解压而不必创建一个 zip 文件夹。我尝试了很多东西,但这些都不起作用。有人知道该怎么做吗?(我的代码可能很糟糕,我不知道,但我不太在意)

import io
import zipfile
import requests
import json
import os

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}

url = 'https://beatsaver.com'
page = 0
num = 0
req = requests.get(url + '/api/maps/latest/' + str(page), headers=headers)
latest = json.loads(req.text)
for item in latest['docs']:
    print(latest['docs'][num]['downloadURL'])
    dl = requests.get(url + latest['docs'][num]['directDownload'])
    path = './maps/{} - {} - {}'.format(latest['docs'][num]['key'], latest['docs'][num]['name'].replace(':', '').replace('?', ''), latest['docs'][num]['uploader']['username'])
    os.mkdir(path)
    #here is where i want it to download the zip
    num += 1

标签: python

解决方案


由于代码原因,无法将此添加为注释。但是,我认为您的意思是requests。虽然它没有使用。

现在这个方法不会创建和保存任何文件。它将直接保存提取的文件。

    from io import BytesIO
    from urllib.request import urlopen
    from zipfile import ZipFile
    zipurl = 'http://stash.compjour.org/data/1800ssa.zip'
    with urlopen(zipurl) as zipresp:
        with ZipFile(BytesIO(zipresp.read())) as zfile:
            zfile.extractall('/tmp/mystuff4')

参考:- https://svaderia.github.io/articles/downloading-and-unzipping-a-zipfile/


推荐阅读