Какую команду мне следует использовать в Python, чтобы получить имя папки, содержащей файл, с которым я работаю?
"C:\folder1\folder2\filename.xml"
Вот "folder2"
что я хочу получить.
Единственное, что я придумал, это использовать os.path.split
дважды:
folderName = os.path.split(os.path.split("C:\folder1\folder2\filename.xml")[0])[1]
Есть ли лучший способ сделать это?
python
python-3.x
directory
Василий
источник
источник
Ответы:
Вы можете использовать
dirname
:И учитывая полный путь, вы можете нормально разделить, чтобы получить последнюю часть пути. Например, используя
basename
:Все вместе:
>>> import os >>> path=os.path.dirname("C:/folder1/folder2/filename.xml") >>> path 'C:/folder1/folder2' >>> os.path.basename(path) 'folder2'
источник
os.path.basename
Вы хотите использовать dirname . Если вам нужен только один каталог, вы можете использовать os.path.basename ,
В совокупности это выглядит так:
os.path.basename(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt'))
Это должно дать вам "other_sub_dir"
Следующий подход не является идеальным, но я изначально предлагал использовать os.path.split и просто получить последний элемент. который будет выглядеть так:
os.path.split(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt'))[-1]
источник
str.split
, лучше использоватьos.path.split
(который лучше справляется с различиями разных ОС).это довольно давно , но если вы используете Python 3.4 или выше, используйте PathLib .
# using OS import os path=os.path.dirname("C:/folder1/folder2/filename.xml") print(path) print(os.path.basename(path)) # using pathlib import pathlib path = pathlib.PurePath("C:/folder1/folder2/filename.xml") print(path.parent) print(path.parent.name)
источник
os.path.dirname
это то, что вы ищете -os.path.dirname(r"C:\folder1\folder2\filename.xml")
Убедитесь, что вы добавили
r
строку в начало, чтобы она рассматривалась как необработанная строка.Демо -
In [46]: os.path.dirname(r"C:\folder1\folder2\filename.xml") Out[46]: 'C:\\folder1\\folder2'
Если вы просто хотите
folder2
, вы можете использоватьos.path.basename
с приведенным выше Примером -os.path.basename(os.path.dirname(r"C:\folder1\folder2\filename.xml"))
Демо -
In [48]: os.path.basename(os.path.dirname(r"C:\folder1\folder2\filename.xml")) Out[48]: 'folder2'
источник
Вы можете получить полный путь в виде строки, а затем разбить ее на список, используя символ-разделитель вашей операционной системы. Затем вы получаете имя программы, имя папки и т. Д., Обращаясь к элементам из конца списка с использованием отрицательных индексов.
Как это:
import os strPath = os.path.realpath(__file__) print( f"Full Path :{strPath}" ) nmFolders = strPath.split( os.path.sep ) print( "List of Folders:", nmFolders ) print( f"Program Name :{nmFolders[-1]}" ) print( f"Folder Name :{nmFolders[-2]}" ) print( f"Folder Parent:{nmFolders[-3]}" )
Результатом выше было следующее:
Full Path :C:\Users\terry\Documents\apps\environments\dev\app_02\app_02.py List of Folders: ['C:', 'Users', 'terry', 'Documents', 'apps', 'environments', 'dev', 'app_02', 'app_02.py'] Program Name :app_02.py Folder Name :app_02 Folder Parent:dev
источник
вы можете использовать pathlib
from pathlib import Path Path(r"C:\folder1\folder2\filename.xml").parts[-2]
Результатом выше было следующее:
'folder2'
источник