我正在尝试有条件地从目录中加载一些文件。我想有一个来自 tqdm 的进度条。我目前正在运行这个:
loaddir = r'D:\Folder'
# loop the files in the directory
print('Data load initiated')
for subdir, dirs, files in os.walk(loaddir_res):
for name in tqdm(files):
if name.startswith('Test'):
#do things
这使
Data load initiated
0%| | 0/6723 [00:00<?, ?it/s]
0%| | 26/6723 [00:00<00:28, 238.51it/s]
1%| | 47/6723 [00:00<00:31, 213.62it/s]
1%| | 72/6723 [00:00<00:30, 220.84it/s]
1%|▏ | 91/6723 [00:00<00:31, 213.59it/s]
2%|▏ | 115/6723 [00:00<00:30, 213.73it/s]
这有两个问题:
- 当进度更新时,我在 Spyder 的 IPython 控制台中会出现一个新行
- 我实际上是在文件上而不是在以“测试”开头的文件上计时,因此进度和剩余时间不准确。
但是,如果我尝试这个:
loaddir = r'D:\Folder'
# loop the files in the directory
print('Data load initiated')
for subdir, dirs, files in os.walk(loaddir_res):
for name in files:
if tqdm(name.startswith('Test')):
#do things
我收到以下错误。
Traceback (most recent call last):
File "<ipython-input-80-b801165d4cdb>", line 21, in <module>
if tqdm(name.startswith('Probe')):
TypeError: 'NoneType' object cannot be interpreted as an integer
我希望只有一行中的进度条在startswith
循环被激活时更新。
- - 更新 - -
我在这里还发现它也可以这样使用:
files = [f for f in tqdm(files) if f.startswith('Test')]
它允许通过用 tqdm 包装可迭代来跟踪列表理解的进度。然而,在 spyder 中,这会导致每个进度更新都有一个单独的行。
----UPDATE2---- 它实际上在 spyder 中运行良好。有时如果循环失败,它可能会返回打印一行进度更新。但是在最近的更新之后,我并没有经常看到这种情况。