Как я могу подсчитать количество подкаталогов в каталоге, основываясь только на строке пути, используя Python

#python

Вопрос:

У меня есть путь в виде такой строки:

 path = "directory/folder1/fodler2/folder3/file1.txt"
 

Я хочу знать, сколько уровней имеет этот путь в данном случае 4.

Как лучше всего это сделать на Python. Я подумал о том, чтобы сосчитать «/»:

 path.count("/")
 

но мне интересно, есть ли лучший способ.

Комментарии:

1. path.count('/') вероятно, это самый простой способ

Ответ №1:

Вы могли бы сделать это довольно легко, используя pathlib :

 from pathlib import Path

path = Path("directory/folder1/fodler2/folder3/file1.txt")

print(len(path.parents), list(path.parents))
 

Что дает:

 5 [Path('directory/folder1/fodler2/folder3'), Path('directory/folder1/fodler2'), Path('directory/folder1'), Path('directory'), Path('.')]
 

Как видно, результат равен 5, потому "." что он также находится в списке как "directory/folder1/fodler2/folder3/file1.txt" неявно равный "./directory/folder1/fodler2/folder3/file1.txt" , поэтому вы всегда можете просто вычесть 1 из результата.


По сравнению с path.count('/') этим это не зависит от платформы…

Ответ №2:

Все зависит от того, насколько точным вы хотите быть. Проблемы, о которых я могу думать:

  • Вы уверены, что последняя часть строки-это имя файла? Если это каталог, имеет ли это значение?
  • Вы уверены, что разделитель пути ‘/’? os.sep-ваш разделитель.
  • Что делать, если строка начинается с os.sep?
  • Что делать, если какой-то os.sep повторится? Например, os.path.exists(«/var//log») возвращает значение True.

Это может быть немного лучше, но решение с помощью pathlib.Путь определенно лучше.

 os.path.normpath(path).count(os.sep)
 

Комментарии:

1. Я хочу сохранить только пути, заканчивающиеся именами файлов

2. Ваш четвертый пункт является обоснованным.

Ответ №3:

Возможно, одним из оптимальных решений могло бы быть path.count(os.sep) . Однако ответ Tomerikoo лучше, чем этот. Однако убедитесь, что pathlib модуль установлен, так как этот модуль не входит по умолчанию в стандартный дистрибутив python2. Но если вы используете python3. Тогда это происходит по умолчанию.