Jestem nowy w Pythonie i przeglądałem pytania i odpowiedzi w tej witrynie, aby znaleźć odpowiedź na moje pytanie. Jednak jestem początkującym i trudno mi zrozumieć niektóre rozwiązania. Potrzebuję bardzo podstawowego rozwiązania.
Czy ktoś mógłby mi wyjaśnić proste rozwiązanie „Pobieranie pliku przez http” i „Zapisywanie go na dysku w systemie Windows”?
Nie jestem też pewien, jak używać modułów shutil i os.
Plik, który chcę pobrać, ma mniej niż 500 MB i jest plikiem archiwum .gz.Jeśli ktoś może wyjaśnić, jak rozpakować archiwum i wykorzystać zawarte w nim pliki, byłoby świetnie!
Oto częściowe rozwiązanie, które napisałem z różnych połączonych odpowiedzi:
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:\folder\file.gz")
with open("file.gz", 'wb') as location:
shutil.copyfileobj(dump, location)
del dump
Czy ktoś mógłby wskazać błędy (poziom początkujący) i wyjaśnić łatwiejsze metody, aby to zrobić?
Dzięki!
testfile.retrieve("http://example.com/example.rpm", "/tmp/test.rpm")
.Jak wspomniano tutaj :
EDIT:
Jeśli nadal chcesz korzystać z żądań, spójrz na to lub to pytanie .źródło
requests
jest niezwykle pomocny w porównaniu dourllib
pracy z interfejsem API REST. Chyba że chcesz zrobić o wiele więcej, to powinno być dobre.import urllib.request
urllib.request.urlretrieve(url, filename)
Używam wget .
Prosta i dobra biblioteka, jeśli chcesz dać przykład?
Moduł wget obsługuje wersje Pythona 2 i Pythona 3
źródło
Cztery metody wykorzystujące wget, urllib i request.
testRequest - 4469882 wywołania funkcji (4469842 prymitywne wywołania) w 20,236 sekund
testRequest2 - 8580 wywołań funkcji (wywołania pierwotne 8574) w 0,072 sekundy
testUrllib - 3810 wywołań funkcji (3775 wywołań pierwotnych) w 0,036 sekundy
testwget - 3489 wywołań funkcji w 0,020 sekundy
źródło
Dla Python3 +
URLopener
jest przestarzała. A kiedy zostanie użyty, otrzymasz błąd jak poniżej:Więc spróbuj:
źródło
Egzotyczne rozwiązanie dla systemu Windows
źródło
Zacząłem tą ścieżką, ponieważ wget ESXi nie jest skompilowany z SSL i chciałem pobrać OVA ze strony internetowej dostawcy bezpośrednio na host ESXi, który znajduje się po drugiej stronie świata.
Musiałem wyłączyć zaporę (leniwy) / włączyć HTTPS poprzez edycję reguł (poprawne)
stworzył skrypt Pythona:
Biblioteki ESXi są trochę sparowane, ale instalator łasicy typu open source wydawał się używać urllib dla https ... więc zainspirowało mnie to do pójścia tą ścieżką
źródło
Innym czystym sposobem zapisania pliku jest:
źródło
urllib.urlretrieve
luburllib.URLopener().retrieve
, niejasne, o co ci chodzi.