
Ситуация: У меня есть скрипт Python, который будет рекурсивно и раздельно подсчитывать общее количество файлов и каталогов. Ниже приведен код:
def traverse(top):
filecount = 0
dircount = 0
for root, dirs, files in os.walk(top):
for f in files:
if dirs: dircount += 1
elif files: filecount += 1
else:
print("Error")
break
print("Num of dir: " + dircount)
print("Num of files: " + filecount)
Проблема: почти каждый раз при запуске кода я получаю разное количество каталогов и файлов.
Вопрос: Не могли бы вы подсказать причину, по которой количество файлов и каталогов будет колебаться? Может быть, это особенность работы Linux?
Дополнительная информация: Просто хочу убедиться, что эта часть моего сценария очень важна для всей программы.
решение1
Работающая система Unix время от времени в процессе нормальной работы создает временные файлы и каталоги.
Простое открытие файла в редакторе или отправка электронного письма, скорее всего, создаст один или два временных файла, а просмотр веб-страниц может создать и удалить сотни файлов за короткий промежуток времени. Кроме того, графическая среда рабочего стола может выполнять кэширование и другие действия, которые вы обычно не замечаете, что создает и удаляет временные файлы.
В зависимости от того, какой у вас главный каталог, вы можете охватить каталоги, которые имеют тенденцию часто меняться, например, /tmp
и все каталоги вложенные в /var
, а также ваш домашний каталог.
решение2
dirs — это список имен каталогов в текущем (корневом) каталоге, а files — это список имен файлов в текущем каталоге.
Я думаю, вам хотелось бы чего-то вроде этого:
def traverse(top):
filecount = 0
dircount = 0
for root, dirs, files in os.walk(top):
dircount += len(dirs)
filecount += len(files)
print("Num of dir: " + dircount)
print("Num of files: " + filecount)