Python

【Python】フルパスに含まれるディレクトリ名を取得したい

shamimatsu

teratailで以前質問させて頂き解決した内容ですが、「フルパスに含まれるフォルダ名を取得」は個人的によく使う内容だったためブログにも残したいと思います。

python3.4以降だとpathlibが使えるのでわかりやすく取得出来るのですが、仕事の環境によってはmayapy(python2.7)しか使えないこともあると思うのでどちらのやり方も書きました。

python3.4以降の場合

pathlibモジュールを使う

\(バックスラッシュ)で階層ごとに分けてくれるので便利です。

import pathlib

jpg_path = pathlib.Path(r'D:\python\photo\cloud\jpg\test.jpg')

print(jpg_path.parts)
# ('D:\\', 'python', 'photo', 'cloud', 'jpg', 'test.jpg')

"""cloudを取得したい場合"""
print(jpg_path.parts[-3])

"""photoを取得したい場合"""
print(jpg_path.parts[-4])

分かれている階層を結合する

先ほど分けた階層をDドライブからphotoまでだけ結合したいとします。
('D:\\', 'python', 'photo', 'cloud', 'jpg', 'test.jpg')

[0:-3]を付けることで0最初から、-3で後ろ3つを消ます
('D:\\', 'python', 'photo)

jionの中にある*(dir_parts)に注目してください。これで結合されます

import pathlib
import os

jpg_path = pathlib.Path(r'D:\python\photo\cloud\jpg\test.jpg')

print(jpg_path.parts[0:-3])
# ('D:\\', 'python', 'photo')

dir_parts = jpg_path.parts[0:-3]

photo_path = os.path.join(*(dir_parts))

print(photo_path)
# D:\python\photo

 

python2.7の場合

mayaはまだpython2.7でpathlibモジュールは使えないため、別の方法です。
python2.7は力技感がありますね。

# -*- coding: utf-8 -*-
import os

jpg_path = r'D:\python\photo\cloud\jpg\test.jpg'

"""cloudを取得したい場合"""
dirname1 = os.path.dirname(jpg_path)
dirname2 = os.path.dirname(dirname1)
result1 = os.path.basename(dirname2)
print result1

"""
photoを取得したい場合
os.path.dirnameで掘り下げる
"""
dirname3 = os.path.dirname(dirname2)
result2 = os.path.basename(dirname3)
print result2

 

ABOUT ME
shamimatsu
shamimatsu
3DCGデザイナー
ながらくゲーム業界で2D、3DCGデザイナーとして働いてきましたが、新しい業界に挑戦中です。 ブログのデザインをリニューアル中のため、見づらい箇所もあるかもしれませんが少しづつ修正していきます。
記事URLをコピーしました