W Pythonie jakiego polecenia powinienem użyć, aby uzyskać nazwę folderu zawierającego plik, z którym pracuję?
"C:\folder1\folder2\filename.xml"
Oto, "folder2"
co chcę dostać.
Jedyne, co wymyśliłem, to użyć os.path.split
dwa razy:
folderName = os.path.split(os.path.split("C:\folder1\folder2\filename.xml")[0])[1]
Czy jest lepszy sposób, aby to zrobić?
python
python-3.x
directory
Wasilij
źródło
źródło
Odpowiedzi:
Możesz użyć
dirname
:Biorąc pod uwagę pełną ścieżkę, możesz normalnie podzielić, aby uzyskać ostatnią część ścieżki. Na przykład używając
basename
:Wszyscy razem:
>>> import os >>> path=os.path.dirname("C:/folder1/folder2/filename.xml") >>> path 'C:/folder1/folder2' >>> os.path.basename(path) 'folder2'
źródło
os.path.basename
Chcesz użyć dirname . Jeśli chcesz tylko ten jeden katalog, możesz użyć os.path.basename ,
Po złożeniu wygląda to tak:
os.path.basename(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt'))
To powinno dać ci „other_sub_dir”
Poniższe podejście nie jest idealnym podejściem, ale pierwotnie zaproponowałem, używając os.path.split i po prostu otrzymałem ostatnią pozycję. który wyglądałby tak:
os.path.split(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt'))[-1]
źródło
str.split
, lepiej jest użyćos.path.split
(który lepiej radzi sobie z różnicami między różnymi systemami operacyjnymi).to jest dość stare, ale jeśli używasz Pythona 3.4 lub nowszego, użyj 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)
źródło
os.path.dirname
jest tym, czego szukasz -os.path.dirname(r"C:\folder1\folder2\filename.xml")
Upewnij się, że
r
ciąg jest dodawany na początku, aby był traktowany jako nieprzetworzony.Próbny -
In [46]: os.path.dirname(r"C:\folder1\folder2\filename.xml") Out[46]: 'C:\\folder1\\folder2'
Jeśli chcesz
folder2
, możesz użyćos.path.basename
powyższego, Przykład -os.path.basename(os.path.dirname(r"C:\folder1\folder2\filename.xml"))
Próbny -
In [48]: os.path.basename(os.path.dirname(r"C:\folder1\folder2\filename.xml")) Out[48]: 'folder2'
źródło
Możesz uzyskać pełną ścieżkę jako ciąg, a następnie podzielić ją na listę przy użyciu znaku separatora systemu operacyjnego. Następnie uzyskujesz nazwę programu, nazwę folderu itp., Uzyskując dostęp do elementów z końca listy za pomocą indeksów ujemnych.
Lubię to:
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]}" )
Wynik powyższego był następujący:
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
źródło
możesz użyć pathlib
from pathlib import Path Path(r"C:\folder1\folder2\filename.xml").parts[-2]
Wynik powyższego był następujący:
'folder2'
źródło