Сценарий счетчика файлов Python работает неправильно

1

Почему "cycleNumber" не считается выше 10?

Изображение 174551

import os

cycleNumber = 1
for files in os.listdir('Cycles'):
    if files.startswith('Cycle' + str(cycleNumber)):
        cycleNumber += 1
  • 3
    Потому что список, возвращаемый os.listdir() отсортирован не так, как вы думаете.
  • 0
    В таких ситуациях вставьте несколько операторов печати, чтобы увидеть, с какими данными вы имеете дело. В этом случае печать будет идти между for и if.
Показать ещё 1 комментарий
Теги:
file
count

1 ответ

2
Лучший ответ

Вы только итерации по списку, возвращенному из os.listdir() (который не находится в каком-либо конкретном порядке) один раз. Это означает, что если файлы были предоставлены в непредвиденном порядке, например:

Cycle2.txt
Cycle1.txt

Тогда потребуется вторая итерация цикла cycleNumber с 1 до 2, но к тому времени вы уже прошли пропуски Cycle2.txt !


Вместо этого вы должны использовать цикл while:

import os
cycleNumber = 0
while any(f.startswith('Cycle' + str(cycleNumber+1)) for f in os.listdir('Cycles')):
    cycleNumber += 1

Тест:

$ mkdir Cycles
$ for i in {1..11}; do touch Cycles/Cycle$i.txt; done;
$ python -q
>>> import os
>>> cycleNumber = 0
>>> while any(f.startswith('Cycle' + str(cycleNumber+1)) for f in os.listdir('Cycles')):
...     cycleNumber += 1
... 
>>> cycleNumber
11

Ещё вопросы

Сообщество Overcoder
Наверх
Меню