【python】フォルダやファイルパスの名前取得方法(中間のフォルダ名も取得したい!)

  • 2021年6月12日
  • 2021年6月12日
  • python

この記事では、pythonを使って

ファイルの名前やフォルダの名前を取得したいことがありそれができたので備忘録として書きました。

私が悩んだのは長いフォルダパスの途中の名前を取得したい!

というところでいい方法がないか調べたのですが、この方法ならできるということを思いつきました。

では紹介していきます。

【python】フォルダやファイルパスの名前取得方法(中間の名前も)

フォルダやファイル名のパス名 取得基本

とりあえず基本からです。

まずこういったパスを基本とします。

C:\Users\starw\OneDrive\ドキュメント\test0\test1\テキスト.txt

ちなみに

path = "C:\Users\starw\OneDrive\ドキュメント\test0\test1\テキスト.txt"

File “<ipython-input-10-1fd4190f96f9>”, line 1 path = “C:\Users\starw\OneDrive\ドキュメント\test0\test1\テキスト.txt” ^ SyntaxError: (unicode error) ‘unicodeescape’ codec can’t decode bytes in position 2-3: truncated \UXXXXXXXX escape

エスケープシーケンスエラーといい、プログラム内で改行等を意味する”\(¥)”を用いられますので怒られます。

その解決法は

  • 先頭にrをつける
  • “\(¥)”を”/”に変換する
  • 一番最初の”¥”を”¥¥”にする

展開せずそのままの値が文字列となる。Windowsのパスや正規表現など、バックスラッシュを多用する文字列を扱うときに便利です。

私はよく先頭に”r”をつける方法でやってます。

ファイル名の取得(os.path.basename)

ファイル名の取得は以下のコードになります。

import os

path = r"C:\\Users\starw\OneDrive\ドキュメント\test0\test1\テキスト.txt"
print(os.path.basename(path))


#出力↓
#テキスト.txt

ちなみに拡張子がいらない場合は

拡張子を含まないファイル名を取得するには後述のos.path.splitext()と組み合わせる。

import os

path = r"C:\\Users\starw\OneDrive\ドキュメント\test0\test1\テキスト.txt"

output = os.path.splitext(os.path.basename(path))
                          
print(output)
#('テキスト', '.txt')


#リスト型になっているので

print(output[0])
#テキスト

print(output[1])
#.txt

フォルダ名(ディレクトリ名)を取得( os.path.dirname)

ファイル名を除いたパスを取得したい場合は下記の通りです。

import os

path = r"C:\\Users\starw\OneDrive\ドキュメント\test0\test1\テキスト.txt" output = os.path.dirname(path) 

print(output) 
#C:\\Users\starw\OneDrive\ドキュメント\test0\test1

ファイルの直上のフォルダ名のみを取得したい場合はos.path.basename()と組み合わせる。

import os

path = r"C:\\Users\starw\OneDrive\ドキュメント\test0\test1\テキスト.txt"

output = os.path.basename(os.path.dirname(path))

print(output)
#test1

というところまではいいのですが

わたしがそこで悩んだのが「test0」を取得したい!

というところです。

スマートではないですが悩んで取得できた方法が次となります。

中間のフォルダ名を取得したい場合は、文字列を削除: replace()を組み合わせる

結果です。

import os

path = r"C:\\Users\starw\OneDrive\ドキュメント\test0\test1\テキスト.txt"

path = path.replace(os.path.basename(path),'')
print(path)
#C:\\Users\starw\OneDrive\ドキュメント\test0\test1\

path = path.replace( os.path.basename(os.path.dirname(path)),'')
print(path)
#C:\\Users\starw\OneDrive\ドキュメント\test0\\

path = path.replace( r'C:\\Users\starw\OneDrive\ドキュメント','')
print(path)
#\test0\\

path = path.replace( '\\','')
print(path)
#test0

わー、できた~!(パチパチパチ)

すごく力技ですが・・・

仕事の自動化で、どうしても中間のフォルダ名が取得したかったので編み出した方法です。

以上となります。

参考になれば幸いです。^^

最新情報をチェックしよう!