Как рассчитать прогресс - PullRequest
0 голосов
/ 06 августа 2020

Я создаю gui, в котором мне нужно показать пользователю индикатор выполнения, показывающий, сколько файла было загружено из inte rnet. Мне удалось использовать tqdm и отобразить его на консоли. Но у меня возникла проблема с передачей этого в gui.

Проблема, с которой я столкнулся, заключается в обновлении индикатора выполнения с процентным значением tqdm. Поскольку tqdm закрывает индикатор выполнения, я не могу получить процентное значение в виде целого числа или числа с плавающей запятой. Я пробовал bar_format='{percentage:.0f}. Это дает мне только процент, но это все. Он по-прежнему не возвращает сам процент в виде целого числа или числа с плавающей запятой.

Это l oop, в котором отображается индикатор выполнения и загружается файл:

from requests import get
from bs4 import BeautifulSoup
from os import path
import sys
from tqdm import tqdm

folderPath = 'C:/Users/Sammy/Desktop/'

url = 'http://www.karavalimunjavu.com/'
res = get(url)
soup = BeautifulSoup(res.text, 'lxml')

# Downloading images.
for images in soup.select('img[data-big]'):
    imgDownload = get(url+images.get('data-big'), stream=True)
    file_size = int(imgDownload.headers.get("Content-Length", None))
    progress = tqdm(total=file_size, file=sys.stdout, bar_format='{percentage:.0f}')
    with open(path.join(folderPath, pageNo), 'wb') as f:
        for data in imgDownload:
            f.write(data)
            progress.update(len(data))
        f.close()
        progress.close()
    break

Как заставить его работать таким образом, чтобы он выводил процентное значение в виде целого числа?

1 Ответ

0 голосов
/ 06 августа 2020

Ответ на этот вопрос довольно прост, если бы я посмотрел немного внимательнее.

from requests import get
from bs4 import BeautifulSoup
from os import path

folderPath = 'C:/Users/Sammy/Desktop/'

url = 'http://www.karavalimunjavu.com/'
res = get(url)
soup = BeautifulSoup(res.text, 'lxml')

for images in soup.select('img[data-big]'):
    pageNo = path.basename(images.get('data-big'))[15:]
    imgDownload = get(url+images.get('data-big'), stream=True)
    file_size = int(imgDownload.headers.get("Content-Length", None))
    progress = 0  # Initialise progress variable
    with open(path.join(folderPath, pageNo), 'wb') as f:
        for data in imgDownload:
            f.write(data)
            progress += len(data)
            print((progress/file_size)*100)  # The logic to print out the percentage
        f.close()
    break
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...