J'ai besoin de télécharger un fichier volumineux (~ 200 Mo). J'ai compris comment télécharger et enregistrer le fichier avec ici . Ce serait bien d'avoir une barre de progression pour savoir combien a été téléchargé. J'ai trouvé ProgressBar mais je ne sais pas comment incorporer les deux ensemble.
Voici le code que j'ai essayé, mais cela n'a pas fonctionné.
bar = progressbar.ProgressBar(max_value=progressbar.UnknownLength)
with closing(download_file()) as r:
for i in range(20):
bar.update(i)
Je vous suggère d'essayer tqdm
[1], c'est très facile à utiliser. Exemple de code à télécharger avec la bibliothèque requests
[2]:
from tqdm import tqdm
import requests
import math
url = "http://example.com/bigfile.bin"
# Streaming, so we can iterate over the response.
r = requests.get(url, stream=True)
# Total size in bytes.
total_size = int(r.headers.get('content-length', 0));
block_size = 1024
wrote = 0
with open('output.bin', 'wb') as f:
for data in tqdm(r.iter_content(block_size), total=math.ceil(total_size//block_size) , unit='KB', unit_scale=True):
wrote = wrote + len(data)
f.write(data)
if total_size != 0 and wrote != total_size:
print("ERROR, something went wrong")
[1]: https://github.com/tqdm/tqdm
[2]: http://docs.python-requests.org/en/master/
Il semble qu'il y ait un décalage entre les exemples de la page tilisation de la barre de progression et ce dont le code a réellement besoin.
Dans l'exemple suivant, notez l'utilisation de maxval
au lieu de max_value
. Notez également l'utilisation de .start()
pour initialiser la barre. Cela a été noté dans un Issue .
import progressbar
import requests
url = "http://stackoverflow.com/"
def download_file(url):
local_filename = 'test.html'
r = requests.get(url, stream=True)
f = open(local_filename, 'wb')
file_size = int(r.headers['Content-Length'])
chunk = 1
num_bars = file_size / chunk
bar = progressbar.ProgressBar(maxval=num_bars).start()
i = 0
for chunk in r.iter_content():
f.write(chunk)
bar.update(i)
i+=1
f.close()
return
download_file(url)
Il semble que vous aurez besoin d'obtenir la taille du fichier distant ( répondu ici ) pour calculer votre chemin.
Vous pouvez ensuite mettre à jour votre barre de progression pendant le traitement de chaque bloc ... si vous connaissez la taille totale et la taille du bloc, vous pouvez déterminer quand mettre à jour la barre de progression.