この記事では、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
わー、できた~!(パチパチパチ)
すごく力技ですが・・・
仕事の自動化で、どうしても中間のフォルダ名が取得したかったので編み出した方法です。
以上となります。
参考になれば幸いです。^^