2016-11-11 13 views
1

Я могу найти doc, объясняющий, как использовать пакет tqdm, но из которого я не могу понять, как создать индикатор выполнения при загрузке данных в Интернете.Как использовать `tqdm` в python, чтобы показать прогресс при загрузке данных в Интернете?

Ниже приведен пример кода, я скопировал из ResidentMario для загрузки данных

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") 

Может кто-нибудь показать мне, как использовать tqdm пакет здесь, чтобы показать процесс загрузки?

Благодаря

ответ

1

В настоящее время я сделать что-то вроде этого:

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

Благодаря Сильмарилем, но ниже работ и имеет больше смысла для меня.

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

так что в основном вы делаете два запроса HTTP для загрузки одного файла. Не очень эффективен, тем более, если целевой URL-адрес проходит динамическую обработку. – silmaril