Python'da dosyanın klasör adını alın


93

Python'da, üzerinde çalıştığım dosyanın bulunduğu klasörün adını almak için hangi komutu kullanmalıyım?

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

İşte "folder2"almak istediğim şey.

Aklıma gelen tek şey os.path.splitiki kez kullanmak :

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

Bunu yapmanın daha iyi bir yolu var mı?


Yanıtlar:


173

Şunları kullanabilirsiniz dirname:

os.path.dirname(path)

Yol adı yolunun dizin adını döndür. Bu, split () işlevine yol iletilerek döndürülen çiftin ilk öğesidir.

Ve tam yol verildiğinde, yolun son bölümünü almak için normal şekilde bölünebilirsiniz. Örneğin, şunu kullanarak basename:

os.path.basename(path)

Yol adı yolunun temel adını döndür. Bu, split () işlevine yol iletilerek döndürülen çiftin ikinci öğesidir. Bu işlevin sonucunun Unix taban adı programından farklı olduğuna dikkat edin; burada '/ foo / bar /' için basename 'bar' ile döner, basename () işlevi boş bir dizge ('') döndürür.


Hep birlikte:

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

17

Dirname kullanmak istiyorsunuz . Yalnızca bu bir dizin kullanabileceğiniz isterseniz os.path.basename ,

Hepsi bir araya getirildiğinde şöyle görünür:

os.path.basename(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt'))

Bu size "other_sub_dir" almalı

Aşağıdaki ideal yaklaşım değildir, ancak başlangıçta os.path.split kullanarak önerdim ve son öğeyi aldım. şuna benzer:

os.path.split(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt'))[-1]

9

bu oldukça eskidir, ancak Python 3.4 veya üstünü kullanıyorsanız PathLib kullanın .

# 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)

8

os.path.dirname aradığınız şey -

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

rDizenin başına ham bir dize olarak kabul edildiğinden emin olun .

Demo -

In [46]: os.path.dirname(r"C:\folder1\folder2\filename.xml")
Out[46]: 'C:\\folder1\\folder2'

Sadece isterseniz folder2, os.path.basenameyukarıdaki ile kullanabilirsiniz , Örnek -

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'

1

Tam yolu bir dize olarak alabilir ve ardından işletim sisteminizin ayırıcı karakterini kullanarak onu bir listeye bölebilirsiniz. Daha sonra negatif indeksler kullanarak listenin sonundaki öğelere erişerek program adını, klasör adını vb. Alırsınız.

Bunun gibi:

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]}" )

Yukarıdakilerin çıktısı şuydu:

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

1

pathlib kullanabilirsiniz

from pathlib import Path
Path(r"C:\folder1\folder2\filename.xml").parts[-2]

Yukarıdakilerin çıktısı şuydu:

'folder2'

0

Aynı yanıtı almak için 2 yol kullanıyorum: bunlardan biri şunu kullanıyor:

   os.path.basename(filename)

Komut dosyamda bulduğum hatalar nedeniyle şu şekilde değiştirdim:

Path = filename[:(len(filename)-len(os.path.basename(filename)))]

bu, python'un '\\'

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.