2016-11-11 2 views
1

Ich kann einige doc finden, die erklären, wie man tqdm Paket benutzt, aber von dem ich nicht herausfinden kann, wie man Fortschrittsmessgerät herstellt, wenn ich Daten online herunterlade.Wie benutzt man `tqdm` in Python, um den Fortschritt beim Herunterladen von Daten online anzuzeigen?

Unten ist ein Beispiel Code, den ich von ResidentMario kopiert für

Daten

def download_file(url, filename): 
    """ 
    Helper method handling downloading large files from `url` to `filename`. Returns a pointer to `filename`. 
    """ 
    r = requests.get(url, stream=True) 
    with open(filename, 'wb') as f: 
     for chunk in r.iter_content(chunk_size=1024): 
      if chunk: # filter out keep-alive new chunks 
       f.write(chunk) 
    return filename 


dat = download_file("https://data.cityofnewyork.us/api/views/h9gi-nx95/rows.csv?accessType=DOWNLOAD", 
        "NYPD Motor Vehicle Collisions.csv") 
Download Könnte mir jemand zeigen, wie hier verwenden tqdm Paket Fortschritt Herunterladen anzeigen zu lassen?

Dank

Antwort

1

Ab jetzt habe ich so etwas tun:

def download_file(url, filename): 
    """ 
    Helper method handling downloading large files from `url` to `filename`. Returns a pointer to `filename`. 
    """ 
    chunkSize = 1024 
    r = requests.get(url, stream=True) 
    with open(filename, 'wb') as f: 
     pbar = tqdm(unit="B", total=int(r.headers['Content-Length'])) 
     for chunk in r.iter_content(chunk_size=chunkSize): 
      if chunk: # filter out keep-alive new chunks 
       pbar.update (len(chunk)) 
       f.write(chunk) 
    return filename 
1

Dank silmaril, aber die folgenden Werke und mehr Sinn für mich macht.

def download_file(url, filename): 
    testread = requests.head(url_r)  # A HEAD request only downloads the headers 
    filelength = int(testread.headers['Content-length']) 

    r = requests.get(url, stream=True) # actual download full file 

    with open(filename, 'wb') as f: 
     pbar = tqdm(total=int(filelength/1024)) 
     for chunk in r.iter_content(chunk_size=1024): 
      if chunk:     # filter out keep-alive new chunks 
       pbar.update() 
       f.write(chunk) 
+0

so im Grunde tun Sie zwei HTTP-Anfrage zum Herunterladen einer einzigen Datei. Nicht sehr effizient, umso mehr, wenn die Ziel-URL eine dynamische Verarbeitung durchläuft. – silmaril

Verwandte Themen