Базовая загрузка и сохранение файлов http на диск в python?



Я новичок в Python, и я просматривал вопросы и ответы на этот сайт, чтобы ответить на мой вопрос. Однако, я новичок и мне трудно понять некоторые решения. Мне нужно очень простое решение.



может кто-нибудь объяснить мне простое решение для "загрузки файла через http" и "сохранения его на диск, в Windows"?



Я не уверен, как использовать модули shutil и os.



файл, который я хочу загрузить находится под 500 МБ и есть .архивный файл gz.Если кто-то может объяснить, как извлечь архив и использовать файлы в нем также, это было бы здорово!



вот частичное решение, которое я написал из разных ответов в сочетании:



import requests
import os
import shutil

global dump

def download_file():
global dump
url = "http://randomsite.com/file.gz"
file = requests.get(url, stream=True)
dump = file.raw

def save_file():
global dump
location = os.path.abspath("D:folderfile.gz")
with open("file.gz", 'wb') as location:
shutil.copyfileobj(dump, location)
del dump


может ли кто-нибудь указать на ошибки (начальный уровень) и объяснить какие-либо более простые методы для этого?



спасибо!

610   7  

7 ответов:

"чистый" способ для того, чтобы скачать файл:

import urllib

testfile = urllib.URLopener()
testfile.retrieve("http://randomsite.com/file.gz", "file.gz")

загрузить файл с веб-сайта, и называет его file.gz. Это одно из моих любимых решений, от загрузка изображения через urllib и python.

в этом примере используется urllib библиотека,и он будет непосредственно извлекать файл из источника.

Как уже упоминалось здесь:

import urllib
urllib.urlretrieve ("http://randomsite.com/file.gz", "file.gz")

EDIT: Если вы все еще хотите использовать запросы, взгляните на этот вопрос или этот.

Я использую wget.

простая и хорошая библиотека, Если вы хотите пример?

import wget

file_url = 'http://johndoe.com/download.zip'

file_name = wget.download(file_url)

модуль wget поддерживает python 2 и python 3 версии

четыре метода с использованием wget, urllib и request.

#!/usr/bin/python
import requests
from StringIO import StringIO
from PIL import Image
import profile as profile
import urllib
import wget


url = 'https://tinypng.com/images/social/website.jpg'

def testRequest():
    image_name = 'test1.jpg'
    r = requests.get(url, stream=True)
    with open(image_name, 'wb') as f:
        for chunk in r.iter_content():
            f.write(chunk)

def testRequest2():
    image_name = 'test2.jpg'
    r = requests.get(url)
    i = Image.open(StringIO(r.content))
    i.save(image_name)

def testUrllib():
    image_name = 'test3.jpg'
    testfile = urllib.URLopener()
    testfile.retrieve(url, image_name)

def testwget():
    image_name = 'test4.jpg'
    wget.download(url, image_name)

if __name__ == '__main__':
    profile.run('testRequest()')
    profile.run('testRequest2()')
    profile.run('testUrllib()')
    profile.run('testwget()')

testRequest-4469882 вызовов функций (4469842 примитивных вызовов) в 20.236 секунд

testRequest2-8580 вызовов функций (8574 примитивных вызовов) за 0,072 секунды

testUrllib-3810 вызовов функций (3775 примитивных вызовов) за 0,036 секунды

вызов функции testwget - 3489 за 0,020 секунды

Экзотическое Решение Для Windows

import subprocess

subprocess.run("powershell Invoke-WebRequest {} -OutFile {}".format(your_url, filename), shell=True)

Я начал этот путь, потому что wget ESXi не компилируется с SSL, и я хотел загрузить OVA с веб-сайта поставщика непосредственно на хост ESXi, который находится на другой стороне мира.

мне пришлось отключить брандмауэр (ленивый) / включить https, отредактировав правила (правильно)

создал скрипт python:

import ssl
import shutil
import tempfile
import urllib.request
context = ssl._create_unverified_context()

dlurl='https://somesite/path/whatever'
with urllib.request.urlopen(durl, context=context) as response:
    with open("file.ova", 'wb') as tmp_file:
        shutil.copyfileobj(response, tmp_file)

библиотеки ESXi как бы спарены, но установщик weasel с открытым исходным кодом, казалось, использовал urllib для https... так что вдохновило меня пойти по этому пути

еще один чистый способ сохранить файл это:

import csv
import urllib

urllib.retrieve("your url goes here" , "output.csv")

Comments

    Ничего не найдено.