python - 无法在 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
推荐阅读
- c# - 如何根据 TextBoxes 的内容增加 ProgressBar 的值?
- android - 无法将文件保存在内部目录中
- html - 在 html 的表格行中添加填充
- javascript - Vue 组件使用 imask.js 获取和设置转换
- java - 当方法肯定是类的一部分时获取 *NoSuchMethodException*
- apache-kafka - 需要帮助来理解 ansible j2
- eclipse - Eclipse 更新后无法启动
- mysql - 如何选择第一次出现列值的行?
- javascript - 如何在javascript中生成一个波动1的随机数数组?
- javascript - 光滑的滑块在 Chrome 上完全不同的位置与字体混淆