2017-05-02 8 views
4

Ich habe versucht, einen Fortschrittsbalken mit dem Tqdm-Modul in Python 3.6 einrichten, aber scheint, dass ich auf halbem Weg bin.Verwenden von Tqdm zum Hinzufügen einer Fortschrittsbalken beim Herunterladen von Dateien

Mein Code ist folgende:

from tqdm import tqdm 
import requests 
import time 

url = 'http://alpha.chem.umb.edu/chemistry/ch115/Mridula/CHEM%20116/documents/chapter_20au.pdf' 

# Streaming, so we can iterate over the response. 
r = requests.get(url, stream=True) 
#Using The Url as a filename 
local_filename = url.split('/')[-1] 
# Total size in bytes. 
total_size = int(r.headers.get('content-length', 0)) 
#Printing Total size in Bytes 
print(total_size) 

#TQDM 
with open(local_filename, 'wb') as f: 
    for data in tqdm(r.iter_content(chunk_size = 512), total=total_size, unit='B', unit_scale=True): 
     f.write(data) 

Das Problem ist, dass, wenn ich legen Sie die chunk_size = 512 in r.iter_content der Fortschrittsbalken überhaupt nicht geladen werden, während die Download-Daten, die zeigen, aber wenn ich chunk_size = 512 vollständig entfernen und Lassen Sie die Klammern leer, der Balken lädt genau so hoch, wie es sollte, aber die Downloadgeschwindigkeit ist schrecklich.

Was mache ich hier falsch?

Antwort

1

Sie sind nicht weit entfernt, aber verpassen einfach so ziemlich den ganzen Code, um den Fortschrittsbalken entsprechend arbeiten zu lassen. Angenommen, Sie haben Ihre Schnittstelle bereits erstellt, hier ist eine Methode, die ich für meine Fortschrittsanzeige verwendet habe. Es lädt die Datei herunter und speichert sie auf dem Desktop (Sie können jedoch angeben, wo Sie sie speichern möchten). Es dauert nur, wie viel von der Datei heruntergeladen wird und teilt sie durch die gesamte Dateigröße und verwendet dann diesen Wert, um den Fortschrittsbalken zu aktualisieren. Lassen Sie mich wissen, wenn dieser Code hilft:

url = 'http://alpha.chem.umb.edu/chemistry/ch115/Mridula/CHEM%20116/documents/chapter_20au.pdf' 
save = 'C:/Users/' + username + "/Desktop/"  
r = requests.get(url, stream=True) 
total_size = int(r.headers["Content-Length"]) 
downloaded = 0 # keep track of size downloaded so far 
chunkSize = 1024 
bars = int(fileSize/chunkSize) 
print(dict(num_bars=bars)) 
with open(filename, "wb") as f: 
    for chunk in tqdm(r.iter_content(chunk_size=chunkSize), total=bars, unit="KB", 
            desc=filename, leave=True): 
     f.write(chunk) 
     downloaded += chunkSize # increment the downloaded 
     prog = ((downloaded * 100/fileSize)) 
     progress["value"] = (prog) # *100 #Default max value of tkinter progress is 100 

return 

progress = der Fortschrittsbalken

Verwandte Themen