Em Python, qual comando devo usar para obter o nome da pasta que contém o arquivo com o qual estou trabalhando?
"C:\folder1\folder2\filename.xml"
Aqui "folder2"
está o que eu quero obter.
A única coisa que descobri é usar os.path.split
duas vezes:
folderName = os.path.split(os.path.split("C:\folder1\folder2\filename.xml")[0])[1]
Existe alguma maneira melhor de fazer isso?
python
python-3.x
directory
Vasily
fonte
fonte
Respostas:
Você pode usar
dirname
:E dado o caminho completo, então você pode dividir normalmente para obter a última parte do caminho. Por exemplo, usando
basename
:Todos juntos:
>>> import os >>> path=os.path.dirname("C:/folder1/folder2/filename.xml") >>> path 'C:/folder1/folder2' >>> os.path.basename(path) 'folder2'
fonte
os.path.basename
Você está tentando usar dirname . Se você quiser apenas aquele diretório, pode usar os.path.basename ,
Quando tudo junto, fica assim:
os.path.basename(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt'))
Isso deve render a você "other_sub_dir"
A abordagem a seguir não é a abordagem ideal, mas originalmente propus, usando os.path.split, e simplesmente obter o último item. que ficaria assim:
os.path.split(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt'))[-1]
fonte
str.split
, é melhor usaros.path.split
(que lida melhor com as diferenças de diferentes sistemas operacionais).isso é muito antigo, mas se você estiver usando Python 3.4 ou superior, use 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)
fonte
os.path.dirname
é o que você está procurando -os.path.dirname(r"C:\folder1\folder2\filename.xml")
Certifique-se de
r
colocar o prefixo na string de forma que seja considerada uma string bruta.Demo -
In [46]: os.path.dirname(r"C:\folder1\folder2\filename.xml") Out[46]: 'C:\\folder1\\folder2'
Se você apenas quiser
folder2
, pode usaros.path.basename
com o exemplo acima,os.path.basename(os.path.dirname(r"C:\folder1\folder2\filename.xml"))
Demo -
In [48]: os.path.basename(os.path.dirname(r"C:\folder1\folder2\filename.xml")) Out[48]: 'folder2'
fonte
Você pode obter o caminho completo como uma string e dividi-lo em uma lista usando o caractere separador do seu sistema operacional. Em seguida, você obtém o nome do programa, o nome da pasta etc. acessando os elementos do final da lista usando índices negativos.
Como isso:
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]}" )
O resultado do acima foi este:
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
fonte
você pode usar pathlib
from pathlib import Path Path(r"C:\folder1\folder2\filename.xml").parts[-2]
O resultado do acima foi este:
'folder2'
fonte