2015-10-27 18 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()関数にパスを渡すことによってペアが返された の2番目の要素です。 この関数の結果はUnixベース名 プログラムとは異なります。 '/ foo/bar /'のbasenameが 'bar'を返す場合、basename() 関数は空の文字列( '')を返します。すべて一緒に


: - その生の文字列として考えるようにあなたが文字列にrを付加ことを確認してください

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

>>> 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良い点!私の答えは 'str.split'で分割するのではなく、 – fedorqui

4

os.path.dirnameは、あなたが探しているものです。

デモ -

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

あなたがいます覗くgにdirnameを使用してください。あなたの「other_sub_dir」

に以下を取得する必要があります

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

が理想的ではありません:あなたは1つのディレクトリだけ、あなたはos.path.basename

を使用することができ、すべて一緒に入れたとき、それはこのようになっていることをしたい場合私はもともと、os.path.splitを使用して提案し、単に最後の項目を取得します。これは次のようになります。

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

ということを反映するように更新しました。異なるOSの違いをよりうまく処理する' os.path.split'を使う方が良いでしょう。 – mgilson

+0

はい。あなたが正しいです!私の心を滑らせた。ありがとう@mgilson – idjaw

関連する問題