[英]unable to update progress bar in 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 之间”我需要在搜索“驱动器”中的目录数量时显示进度条。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.