复制文件时在控制台中显示进度条。在 python 中使用 tqdm

Posted

技术标签:

【中文标题】复制文件时在控制台中显示进度条。在 python 中使用 tqdm【英文标题】:display progress bar in console while copying files. using tqdm in python 【发布时间】:2020-10-02 03:47:49 【问题描述】:

我有一个 python 脚本,它从源文件夹读取并使用 shutil 包将现有文件复制到指定的目标。

我想在复制这些文件时显示一个进度条,所以我尝试导入 tqdm 包,但是当我尝试运行程序时它崩溃并显示以下错误:

for obj in iterable : typeError: 'int' object is not iterable

代码:

#packages for list and copy folders & files.
import calendar
import os
import shutil
from os import path
from datetime import date

#packags for progressBar
from tqdm import tqdm
from time import sleep


def main():
    copy("O:/PDF/")


dst3 = "C:/Users/gmatta/Documents"

def copy(src):
    src2 = os.path.join(src, datefile)
    z=0
    for dirpath, dirnames, files in os.walk(src):           
        print(f'Found directory: dirpath')
        if len(dirnames)==0 and len(files)==0:
            print("this directory is empty")
            pass

        for  file in files:
            full_file_name = os.path.join(dirpath, file)

            if os.path.join(dirpath)== src2:
                if file.endswith("pdf"):
                    numfile = len(files)

# the problem is in the 2 lines below 
                    for z in enumerate(tqdm(numfile)):
                        sleep(.1)
            #       #copy files PDF TO dest 
                    shutil.copy(full_file_name, dst3)
                    z+=1
if __name__=="__main__":
    main()

【问题讨论】:

去检查 python doc 中的 enumerate 返回什么,你会找到答案 【参考方案1】:

tqdm expects an iterable argument。

在您的代码中的这一行

for z in enumerate(tqdm(numfile)):

numfile 是一个整数。 尝试使用range(numfile) 或许?

【讨论】:

以上是关于复制文件时在控制台中显示进度条。在 python 中使用 tqdm的主要内容,如果未能解决你的问题,请参考以下文章

在进度条上显示文件复制状态

jQuery UI - 如何在加载时在页面顶部显示进度条

Python 进度条原理

进度条和文件复制问题?

progressbar怎么显示复制进度

Python实用工具用Python在控制台输出进度条