2015-10-27 3 views
11

В Python, какую команду следует использовать для получения имени папки, содержащей файл, с которым я работаю?Получить имя папки для файла в Python

"C:\folder1\folder2\filename.xml"

Вот "folder2", что я хочу получить.

Единственное, что я придумал, чтобы использовать os.path.split дважды:

folderName = os.path.split(os.path.split("C:\folder1\folder2\filename.xml")[0])[1]

Есть ли лучший способ сделать это?

+0

можно дублировать: [Python - Извлечь путь к папке с пути к файлу] (http://stackoverflow.com/q/17057544/4279) – jfs

ответ

21

Вы можете использовать dirname:

os.path.dirname(path) 

Возврат имя каталога пути имен файлов. Это первый элемент пары, возвращаемой путем прохождения пути к функции split().

И учитывая полный путь, вы можете нормально разбить, чтобы получить последнюю часть пути. Например, с помощью basename:

os.path.basename(path) 

Возврата базового имени пути имен файлов. Это второй элемент пары, возвращенной путем прохождения пути к функции split(). Обратите внимание, что результат этой функции отличается от базовой программы Unix ; где basename для '/ foo/bar /' возвращает 'bar', функция basename() возвращает пустую строку ('').


Все вместе:

>>> import os 
>>> path=os.path.dirname("C:/folder1/folder2/filename.xml") 
>>> path 
'C:/folder1/folder2' 
>>> os.path.basename(path) 
'folder2' 
+2

В качестве альтернативы, чтобы получить последнюю часть, вам может использовать 'os.path.basename' – mgilson

+0

@mgilson хороший момент! Обновленный мой ответ, чтобы отразить это, большое спасибо – fedorqui

4

os.path.dirname является то, что вы ищете -

os.path.dirname(r"C:\folder1\folder2\filename.xml") 

Убедитесь, что вы предварять r в строку так, чтобы ее рассматривать в качестве исходного строки ,

Demo -

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' 
5

Вы заглянуть г для использования 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] 
+4

, а не расщепление с помощью 'str.split', лучше использовать' os.path.split' (который лучше справляется с различиями в разных операционных системах). – mgilson

+0

Да. Ты прав! Запамятовал. Спасибо @mgilson – idjaw

Смежные вопросы