2017-05-02 10 views
4

파이썬 3.6에서 Tqdm 모듈을 사용하여 진행률 표시 줄을 설정하려고했지만 중간에있는 것처럼 보입니다.파일을 다운로드 할 때 Tqdm을 사용하여 진행 막대 추가

내 코드는 다음

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) 

문제는, 즉 내가 삽입 할 때 다운로드 데이터를 표시하는 동안 진행률 표시 줄이 전혀로드하지 않습니다,하지만 난 chunk_size = 512을 완전히 제거 할 때 chunk_size = 512r.iter_content에와 괄호를 비워두면 막대가 정확하게로드되지만 다운로드 속도는 끔찍합니다.

여기서 내가 뭘 잘못하고 있니?

답변

1

당신은 멀지는 않았지만 모든 코드가 누락되어 진행률 표시 줄이 적절하게 작동합니다. 이미 인터페이스를 만들었다 고 가정 할 때, 진행률 표시 줄에 사용한 방법은 다음과 같습니다. 파일을 다운로드하여 바탕 화면에 저장합니다 (그러나 저장할 위치는 지정할 수 있습니다). 단순히 파일의 양을 다운로드 한 다음 전체 파일 크기로 나눈 다음 해당 값을 사용하여 진행률 막대를 업데이트합니다. 이 코드가 도움이되는지 알려주세요 :

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 = 진행률 표시 줄을