[PYTHON] 파이썬 3을위한 progressbar 다운로드
PYTHON파이썬 3을위한 progressbar 다운로드
파이썬 3에서 파일을 다운로드하는 동안 진행해야합니다. 나는 Stackoverflow에 관한 몇 가지 주제를 보았다.하지만 프로그래밍에 대한 멍청한 생각을 가진 사람은 아무도 완전한 예제를 게시하지 않았고, 파이썬 3에서 작업을 할 수있는 분수는 하나도 없다. .
추가 정보:
좋아, 그래서 나는 이것을 가지고있다 :
from urllib.request import urlopen
import configparser
#checks for files which need to be downloaded
print(' Downloading...')
file = urlopen(file_url)
#progress bar here
output = open('downloaded_file.py','wb')
output.write(file.read())
output.close()
os.system('downloaded_file.py')
스크립트는 파이썬 명령 줄을 통해 실행됩니다.
해결법
-
==============================
1.url을 파일로 다운로드하고, reporthook 콜백을 지정하여 진행 상황을보고하는 urlretrieve ()가 있습니다.
url을 파일로 다운로드하고, reporthook 콜백을 지정하여 진행 상황을보고하는 urlretrieve ()가 있습니다.
#!/usr/bin/env python3 import sys from urllib.request import urlretrieve def reporthook(blocknum, blocksize, totalsize): readsofar = blocknum * blocksize if totalsize > 0: percent = readsofar * 1e2 / totalsize s = "\r%5.1f%% %*d / %d" % ( percent, len(str(totalsize)), readsofar, totalsize) sys.stderr.write(s) if readsofar >= totalsize: # near the end sys.stderr.write("\n") else: # total size is unknown sys.stderr.write("read %d\n" % (readsofar,)) urlretrieve(url, 'downloaded_file.py', reporthook)
다음은 GUI 진행 표시 줄입니다.
import sys from threading import Event, Thread from tkinter import Tk, ttk from urllib.request import urlretrieve def download(url, filename): root = progressbar = quit_id = None ready = Event() def reporthook(blocknum, blocksize, totalsize): nonlocal quit_id if blocknum == 0: # started downloading def guiloop(): nonlocal root, progressbar root = Tk() root.withdraw() # hide progressbar = ttk.Progressbar(root, length=400) progressbar.grid() # show progress bar if the download takes more than .5 seconds root.after(500, root.deiconify) ready.set() # gui is ready root.mainloop() Thread(target=guiloop).start() ready.wait(1) # wait until gui is ready percent = blocknum * blocksize * 1e2 / totalsize # assume totalsize > 0 if quit_id is None: root.title('%%%.0f %s' % (percent, filename,)) progressbar['value'] = percent # report progress if percent >= 100: # finishing download quit_id = root.after(0, root.destroy) # close GUI return urlretrieve(url, filename, reporthook) download(url, 'downloaded_file.py')
파이썬 3.3에서 urlretrieve ()는 서로 다른 reporthook 인터페이스를 가지고 있습니다 (문제 16409 참고). 이를 해결하기 위해 FancyURLopener를 통해 이전 인터페이스에 액세스 할 수 있습니다.
from urllib.request import FancyURLopener urlretrieve = FancyURLopener().retrieve
동일한 스레드 내에서 진행률 막대를 업데이트하려면 urlretrieve () 코드를 인라인 할 수 있습니다.
from tkinter import Tk, ttk from urllib.request import urlopen def download2(url, filename): response = urlopen(url) totalsize = int(response.headers['Content-Length']) # assume correct header outputfile = open(filename, 'wb') def download_chunk(readsofar=0, chunksize=1 << 13): # report progress percent = readsofar * 1e2 / totalsize # assume totalsize > 0 root.title('%%%.0f %s' % (percent, filename,)) progressbar['value'] = percent # download chunk data = response.read(chunksize) if not data: # finished downloading outputfile.close() root.destroy() # close GUI else: outputfile.write(data) # save to filename # schedule to download the next chunk root.after(0, download_chunk, readsofar + len(data), chunksize) # setup GUI to show progress root = Tk() root.withdraw() # hide progressbar = ttk.Progressbar(root, length=400) progressbar.grid() # show progress bar if the download takes more than .5 seconds root.after(500, root.deiconify) root.after(0, download_chunk) root.mainloop() download2(url, 'downloaded_file.py')
-
==============================
2.나는이 코드 조각이 당신을 도울 수 있다고 생각한다. 나는 그것이 당신이 원하는 것과 정확히 일치하지는 않습니다. 적어도 그것은 당신에게 일할 무언가를 주어야합니다.
나는이 코드 조각이 당신을 도울 수 있다고 생각한다. 나는 그것이 당신이 원하는 것과 정확히 일치하지는 않습니다. 적어도 그것은 당신에게 일할 무언가를 주어야합니다.
import tkinter from tkinter import ttk from urllib.request import urlopen def download(event): file = urlopen('http://www.python.org/') output = open('downloaded_file.txt', 'wb') lines= file.readlines() i = len(lines) for line in lines: output.write(line) pbar.step(100/i) output.close() file.close() root = tkinter.Tk() root.title('Download bar') pbar = ttk.Progressbar(root, length=300) pbar.pack(padx=5, pady=5) btn = tkinter.Button(root, text="Download") # bind to left mouse button click btn.bind("<Button-1>", download) btn.pack(pady=10) root.mainloop()
이 작품은, 나는 그것을 시도했습니다.
from https://stackoverflow.com/questions/13881092/download-progressbar-for-python-3 by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Python으로 원격 PostgreSQL 데이터베이스에 연결하는 방법 (0) | 2018.11.27 |
---|---|
[PYTHON] Python에서 C로 코드 변환기를 작성 하시겠습니까? [닫은] (0) | 2018.11.27 |
[PYTHON] MultiIndex pandas DataFrame의 하위 집합을 업데이트하는 방법 (0) | 2018.11.27 |
[PYTHON] Python에서 시스템 폴더 위치 찾기 (0) | 2018.11.27 |
[PYTHON] 파이썬에서 들여 쓰기 된 텍스트 파일에서 나무 / 깊게 중첩 된 dict 만들기 (0) | 2018.11.27 |