Получение синтаксической ошибки в FTP-программе TQDM Python

#python-3.x #tqdm

Вопрос:

Когда я пытаюсь запустить следующий код, он выдает синтаксическую ошибку. Кто-нибудь может, пожалуйста, сказать мне, как исправить эту ошибку. Спасибо,

 with tqdm(unit='blocks', unit_scale=True, leave=False, miniters=1, desc=f'Uploading {thumbnailname}......', total=filesize) as tqdm_instance:
    session.storbinary('STOR '   thumbnailname, file, 2048,
                       callback=lambda sent: tqdm_instance.update(len(sent)))
 

Ответ №1:

Попробуйте это:

Это работает, если вы создадите функцию обратного вызова, которая будет обновлять tqdm на каждой итерации.

 with tqdm(unit = 'b', unit_scale = True, leave = False, miniters = 1, desc = 'file name', total = filesize) as tqdm_instance:
    def tqdm_callback(data):
        # update progress bar and write out data
        tqdm_instance.update(len(data))
        raw_file.write(data)

        # check to see if download has completed
        if (raw_file.tell() == filesize):
            # close down the progress bar
            # prevents an extra ftp call which generates a timed out exception
            tqdm_instance.close()

    # make ftp data request
    ftp.retrbinary(f"RETR suppl/{raw_filename}", tqdm_callback)
 

из библиотеки python methylprep https://github.com/FoxoTech/methylprep/blob/master/methylprep/download/geo.py#L152

Тем не менее, я пришел сюда в поисках дополнительных примеров, потому что я думаю, что TQDM путается, если FTP-блоки содержат ошибки и их необходимо повторно отправить. В этом случае общее количество блоков для цикла изменится, и цикл может завершиться до того, как будут выполнены все блоки.