Самый простой способ сделать это - использовать pathlib
. Использование parent
даст вам полный путь родителя, а name
даст вам только последний компонент:
>>> from pathlib import Path
>>> path = Path("/a/b/c/d/e")
>>> path.parent.name
'd'
Для сравнения , чтобы сделать то же самое с os.path
, вам необходимо получить basename из dirname вашего пути. Так что это переводится прямо в:
import os
path = "C:/example/folder/file1.jpg"
print(os.path.basename(os.path.dirname(path)))
Какая версия лучше:
os.path.split(os.path.split(path)[0])[1]
Где оба дают:
'folder'
Как видите, pathlib
подход гораздо понятнее и читабельнее. Поскольку pathlib
включает в себя подход OOP для представления путей, вместо строк мы получаем четкую цепочку вызовов атрибутов / методов.
path.parent.name
Читается в следующем порядке:
начать с пути -> взять его родителя -> взять его имя
В то время как в подходе os
functions-accept-strings вам действительно нужно читать изнутри!
os.path.basename(os.path.dirname(path))
Читается в следующем порядке:
Имя родителя пути
С чем, я уверен, вы согласитесь, гораздо сложнее читать и понимать (и это просто пример).
Вы также можете использовать метод str.split
вместе с os.sep
:
>>> path = "C:\\example\\folder\\file1.jpg"
>>> path.split(os.sep)[-2]
'folder'
Но в качестве состояния документов:
Обратите внимание, что знание этого [(разделителя)] недостаточно для анализа или объединения путей - используйте os.path.split () и os.path.join () - но это иногда полезно.