Pythonでファイルのフォルダ名を取得する


93

Pythonでは、作業しているファイルを含むフォルダーの名前を取得するためにどのコマンドを使用する必要がありますか?

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

ここで"folder2"私が取得したいものです。

私が思いついた唯一のことは、os.path.split2回使用することです。

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

それを行うためのより良い方法はありますか?


重複の可能性:
Python-

回答:


173

あなたが使用することができますdirname

os.path.dirname(path)

パス名パスのディレクトリ名を返します。これは、関数split()にパスを渡すことによって返されるペアの最初の要素です。

そして、フルパスが与えられると、パスの最後の部分を取得するために通常どおりに分割できます。たとえば、basename:を使用して

os.path.basename(path)

パス名パスのベース名を返します。これは、関数split()にパスを渡すことによって返されるペアの2番目の要素です。この関数の結果は、Unixのbasenameプログラムとは異なることに注意してください。'/ foo / bar /'のbasenameは 'bar'を返しますが、basename()関数は空の文字列( '')を返します。


すべて一緒に:

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

17

dirnameの使用を検討しています。その1つのディレクトリのみが必要な場合は、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]

9

これはかなり古いですが、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)

8

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'

1

フルパスを文字列として取得し、オペレーティングシステムの区切り文字を使用してリストに分割することができます。次に、負のインデックスを使用してリストの最後から要素にアクセスすることにより、プログラム名、フォルダー名などを取得します。

このような:

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

1

あなたはpathlibを使うことができます

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

上記の出力は次のとおりです。

'folder2'

0

私は同じ応答を得るために2つの方法を使用しています:それらの1つは使用します:

   os.path.basename(filename)

スクリプトで見つけたエラーのため、次のように変更しました。

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

Pythonによる回避策です '\\'

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.