2017-08-01 1 views
0

Je fais une requête POST à ​​un serveur pour générer un fichier CSV et la réponse de la requête POST est une donnée CSV que je veux écrire dans un fichier.Python-requests - Barre de progression de téléchargement

Je ne peux jamais connaître la taille du fichier CSV (il peut être de 10 Mo, 100 Mo ou 1000 Mo) et, en tant que tel, il n'y a pas d'en-tête de longueur de contenu.

J'ai écrit une fonction qui télécharge fait une demande POST au serveur, génère un fichier CSV et écrit la réponse à un fichier CSV. Cependant, je me bats avec la barre de progression.

Comment ajouter une barre de progression?

r = requests.post(URL, data, stream=True) 
#Download progress here 
+0

Jetez un oeil à: [barre de progression en cours de téléchargement fichier-over-http-avec-requêtes] (https://stackoverflow.com/questions/37573483/progress-bar- while-download-file-over-http-avec-demandes), ou: [python-progress-bar-and-downloads] (https://stackoverflow.com/questions/15644964/python-progress-bar-and-downloads –

+0

J'ai regardé ceux-ci mais je n'ai pas pu comprendre comment ajouter une barre de progression dans mon cas car mes en-têtes de réponse n'auront pas d'en-tête Content-Length. – user6037143

Répondre

0
def download_file(url, local_path="./"): 
    local_filename = url.split('/')[-1] 
    path = local_path + local_filename 

    r = requests.get(url, stream=True) 
    total_size = int(r.headers.get('content-length', 0)) 

    with open(local_filename, 'wb') as f: 
     for chunk in tqdm(r.iter_content(32*1024), total=total_size,unit='B', unit_scale=True): 
      if chunk: 
       f.write(chunk) 

    return path