Базовая загрузка и сохранение файлов 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
может ли кто-нибудь указать на ошибки (начальный уровень) и объяснить какие-либо более простые методы для этого?
спасибо!
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