474 votes

Télécharger un gros fichier en python avec des requêtes

Demandes est une très belle bibliothèque. J'aimerais l'utiliser pour télécharger de gros fichiers (>1GB). Le problème est qu'il n'est pas possible de garder tout le fichier en mémoire ; je dois le lire par morceaux. Et c'est un problème avec le code suivant :

import requests

def DownloadFile(url)
    local_filename = url.split('/')[-1]
    r = requests.get(url)
    f = open(local_filename, 'wb')
    for chunk in r.iter_content(chunk_size=512 * 1024): 
        if chunk: # filter out keep-alive new chunks
            f.write(chunk)
    f.close()
    return 

Pour une raison quelconque, cela ne fonctionne pas de cette façon : il charge toujours la réponse en mémoire avant de l'enregistrer dans un fichier.

UPDATE

Si vous avez besoin d'un petit client (Python 2.x /3.x) qui peut télécharger de gros fichiers à partir de FTP, vous pouvez le trouver aquí . Il prend en charge le multithreading et les reconnexions (il surveille les connexions) et règle les paramètres des sockets pour la tâche de téléchargement.

2voto

Utiliser wget de python à la place. Voici un extrait

import wget
wget.download(url)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X