Я пытаюсь условно загрузить некоторые файлы из каталога. Я хотел бы иметь индикатор процесса от 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]
У этого есть две проблемы:
- Когда прогресс обновляется, в моей консоли IPython в Spyder появляется новая строка
- На самом деле я зацикливаюсь на файлах, а не на файлах, которые начинаются с «Test», и поэтому прогресс и оставшееся время не точны.
Однако, если я попробую это:
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
.
---- UPDATE ----
Я также узнал здесь , что его также можно использовать так:
files = [f for f in tqdm(files) if f.startswith('Test')]
Что позволяет отслеживать прогресс в понимании списка, оборачивая итерируемое в tqdm. Однако в spyder это приводит к отдельной строке для каждого обновления прогресса.
---- UPDATE2 ----
Это на самом деле прекрасно работает в Spyder. Иногда, если цикл завершается неудачей, он может вернуться к печати одной строки обновления прогресса. Но я не видел этого очень часто после последних обновлений.