【问题标题】:Download and Extract Zip file下载并解压 Zip 文件
【发布时间】:2021-03-07 10:53:33
【问题描述】:

我想从一个 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

【问题讨论】:

  • "我暂时不想保存"..是什么意思?错误是什么..如果有的话?你能澄清一点吗?
  • 我希望你现在能理解,如果有/有些错误很抱歉,我是法国人
  • 您要将它们提取到哪里?你能给我一个你系统上的示例路径吗?
  • 在这种情况下,我想要文件 F:\Python\DailyDownloader\maps 中的 /api/maps/11fff 的内容`文件名`。在这种情况下,该文件包含一些 json 文件和一首歌曲
  • 我知道。您正在从 json 中抓取下载链接。我下载了一个来看看。文件名(文件夹名..提取后)是这样的..8be3144789fb89834402a7ec2e0dd4e8844144b3.zip..这就是你想要的?

标签: python


【解决方案1】:

由于代码原因,无法将此添加为注释。但是,我认为您的意思是。虽然它没有使用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/

【讨论】:

  • 谢谢,这是个好主意,但不是我在说的(但还是谢谢)
  • @Moréo 那么你应该解释为什么这不是你在说的,并且更清楚地解释你在说什么,所以我们不会一直浪费时间
  • @RandomDavis 他更新了他的问题。我取消了我的答案。这就是为什么看不到旧答案的原因。很抱歉造成混淆。
  • 非常感谢,这正是我所需要的。我很抱歉占用你的时间。非常感谢
  • @Moréo ..哦!..我正要删除我的答案并在 cmets 中发布链接..因为它不使用 requests。嗯..很高兴知道它有帮助。
猜你喜欢
  • 2016-01-15
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 1970-01-01
  • 2011-05-28
  • 2021-03-03
  • 2023-03-22
  • 1970-01-01
相关资源
最近更新 更多