#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. Тогда это происходит по умолчанию.