首页 > 解决方案 > 无法在 python progressbar2 中更新进度条

问题描述

import string
from ctypes import windll
from glob import glob
import os
import time
import progressbar
global totalFiles

def read_drives(drive):
    totalFiles=0
    totalDirs=0
    l=os.listdir(drive)
    l=len(l)
    bar = progressbar.ProgressBar(max_value=l)
    for  base, dirs, files in os.walk(drive):
        #print('Searching in : ',base)
        for directories in dirs:
            totalDirs+=1
            bar.update(totalDirs)
        for Files in files:
            totalFiles +=1

def get_drives():
    drives = []
    bitmask = windll.kernel32.GetLogicalDrives()
    for letter in string.ascii_uppercase:
        if bitmask & 1:
            drives.append(letter)
        bitmask >>= 1

    return drives 

if __name__ == '__main__':
    lis = get_drives() 
    read_drives(lis[2]+':\\')

仍然没有解决方案,请帮助,显示此错误 - “ValueError:值 32 超出范围,应在 0 和 31 之间”我需要在搜索“驱动器”中的目录数量时显示进度条。

标签: python

解决方案


        for directories in dirs:
            bar.update(totalDirs)
        for Files in files:
            totalFiles +=1

你没有totalDirs在任何地方增加。为什么你期望进度条改变它的值?该栏实际上确实会自行更新,但您看不到这一点,因为您一次又一次地将相同的 0 扔给它。您必须以totalDirs与您相同的方式增加totalFiles

        for dir in dirs:
            totalDirs += 1
            bar.update(totalDirs)
        for file in files:
            totalFiles += 1

编辑:您将进度条的最大值设置为顶级目录驱动器中的目录数,但稍后将这些目录中的目录添加到totalDirs。您必须递归地计算目录。您的完整read_drives代码应如下所示:

def read_drives(drive):
    totalFiles = 0
    totalDirs = 0
    l = 0
    for  base, dirs, files in os.walk(drive):
        l += len(dirs)

    bar = progressbar.ProgressBar(max_value=l)
    for  base, dirs, files in os.walk(drive):
        for directories in dirs:
            totalDirs += 1
            bar.update(totalDirs)
        for Files in files:
            totalFiles += 1

推荐阅读