Téléchargement et sauvegarde de fichiers http de base sur le disque en python ?

Je suis novice en Python et j'ai parcouru les questions-réponses de ce site pour trouver une réponse à ma question. Cependant, je suis un débutant et j'ai du mal à comprendre certaines des solutions proposées. J'ai besoin d'une solution très basique.

Quelqu'un pourrait-il m'expliquer une solution simple pour 'Télécharger un fichier par http&#39 ; et 'L'enregistrer sur le disque, dans Windows&#39 ;, pour moi ?

Je ne sais pas non plus comment utiliser les modules shutil et os.

Le fichier que je veux télécharger fait moins de 500 Mo et est une archive .gz. Si quelqu'un peut m'expliquer comment extraire l'archive et utiliser les fichiers qu'elle contient, ce serait formidable !

Voici une solution partielle, que j'ai écrite à partir de plusieurs réponses combinées :

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

Quelqu'un pourrait-il me signaler des erreurs (niveau débutant) et m'expliquer des méthodes plus simples pour y parvenir ?

Merci !

Solution

Une façon propre de télécharger un fichier est :

import urllib

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

Ceci télécharge un fichier depuis un site web et le nomme file.gz. C'est l'une de mes solutions préférées, de https://stackoverflow.com/questions/3042757/downloading-a-picture-via-urllib-and-python.

Cet exemple utilise la bibliothèque urllib, et récupère directement le fichier depuis une source.

Commentaires (8)

Comme indiqué [ici][1] :

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

EDIT: Si vous voulez toujours utiliser les requêtes, jetez un coup d'oeil à [cette question][2] ou [celle-ci][3].

[1] : https://stackoverflow.com/questions/22676/how-do-i-download-a-file-over-http-using-python/22776#22776 [2] : https://stackoverflow.com/questions/14114729/save-a-file-using-the-python-requests-library [3] : https://stackoverflow.com/questions/13137817/how-to-download-image-using-requests

Commentaires (6)

J'utilise [wget][1].

Une bibliothèque simple et bonne si vous voulez faire un exemple ?

import wget

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

file_name = wget.download(file_url)

le module wget supporte les versions python 2 et python 3

[1] : https://pypi.python.org/pypi/wget

Commentaires (0)