Pythonで文字列を扱う方法は様々ありますが
今回紹介するのはパス文字列を操作する方法です。
アプリケーションの起動やファイルの読み込み、ファイルの保存 など
ファイルを扱う際には必ずファイルパスの操作が必要になります。
Pythonにはパスを扱う方法として
osモジュールの
os.paht()
が用意されていて簡単にファイル名を取得したりディレクトリパスそして拡張子を分離する事が出来ます。
この記事ではPythonの「os.paht()」を使ったパス文字列の操作方法とMAYAでパスを取り扱う方法を紹介します。
basename()ファイルパスからファイル名だけを抜き出す
ファイルパスからファイル名を抜き出すには
os.path.basename()
を使います。
import os
path = "./test/test2/test3/testfile.txt"
basename_path = os.path.basename(path)
print(basename_path)
説明:
import os
osモジュールをインポート
basename_path = os.path.basename(path)
os.path.basename(パス文字列)でファイルパスからファイル名を抜き出せます。
結果:
“./test/test2/test3/testfile.txt”からファイル名「testfile.txt」を抜き出しました。
ディレクトリパスから最後のフォルダ名(ディレクトリ名)を抜き出す
os.path.basename()を使ってファイルパスからファイル名を抜き出せました。
ただこのbasename()はファイルパスからファイル名を抜き出す機能ではなく、パスから最後の文字列を抜き出す機能と理解する方が正しく扱えると思います。
なのでパスの最後がファイル名ではなく、フォルダ名(ディレクトリ名)であれば
import os
path = "./test/test2/test_dir"
basename_path = os.path.basename(path)
print(basename_path)
結果:
パスの最後のフォルダ名(ディレクトリ名)が抜き出せます。
dirname()ファイルパスからディレクトリパスを取得する
ファイルパスからディレクトリパスを取得するには
os.path.dirname()
を使います。
import os
filepath = "./test/test_dir/test_file.txt"
path_dir = os.path.dirname(filepath)
print(path)
説明:
path_dir = os.path.dirname(filepath)
os.path.dirname(ファイルパス)でディレクトパスを取得できます
結果:
ファイルパスからディレクトリパスが取得されました。
split()ディレクトリパスとファイル名を分ける
ファイルパスのディレクトリパスとファイル名を分割するには
os.path.split()
を使います。
import os
filepath = "./test/test_dir/test_file.txt”
dirpath_filename = os.path.split(filepath)
print(dirpath_filename )
説明:
dirpatch_filename = os.path.split(filepath)
os.path.split(ファイルパス)でディレクトリパスとファイル名に分割できます
結果:
ディレクトリパスとファイル名がリストで返されました
splitext()ファイルパスから拡張子外しそれぞれを抜き出す
ファイルパスから拡張子を分離して別々に取得するには
os.path.splitext()
を使います。
import os
filepath = "./test/test_dir/test_file.txt"
filename_splitext = os.path.splitext(filepath)
print(filename_splitext)
説明:
filename_splitext = os.path.splitext(filepath)
os.path.splitext(ファイルパス)でファイルパスから拡張子を分離します
結果:
ファイルパスから拡張子が外れリストで返されました。
join()フォルダパスとファイル名を結合
ディレクトリパスとファイル名を結合する場合
文字列の処理として
"./test/test2/test3” + “/“ + “test_file.txt”
と書くこともできますが。
os.path.join()
を使うと「/」のような区切り文字を自動で追加してれます。
import os
dirpath = "./test/test_dir"
filename = "test_file.txt"
filepath = os.path.join(dirpath,filename)
print(filepath)
説明:
filepath = os.path.join(dirpath,filename)
os.path.join(ディレクトリパス,ファイル名)で結合します
結果:
ディレクトリパスとファイル名の間に「/」区切り文字が追加されて出力されました。
上記の例ではディレクトパスとファイル名を結合しましたが
ディレクトリ間を結合することもできます。
import os
dir_path = os.path.join("dir_a","dir_b","dir_c","dir_d")
print(dir_path)
結果:
「/」区切り文字で全て結合されました
MAYAの応用:選択したオブジェクトごとに保存
選択したオブジェクトを現在開いているファイルパスに「ファイル名_オブジェクト名.me」で保存する
import maya.cmds as cmds
import os
scenefile_path = cmds.file(q=True, sceneName=True)
select_obj = cmds.ls(sl=True)
scenefile_name_ext = os.path.splitext(scenefile_path)
for i_select_obj in select_obj:
cmds.select(cl=True)
cmds.select(i_select_obj , r = True)
new_scene_file_path = "{}_{}{}".format(scenefile_name_ext[0],i_select_obj,scenefile_name_ext[1])
cmds.file(new_scene_file_path ,force=True,options="v=0",typ="mayaBinary",pr=True,es=True )
説明:
scenefile_path = cmds.file(q=True, sceneName=True)
現在開いているシーンファイルのパスを取得
scenefile_name_ext = os.path.splitext(scenefile_path)
os.path.splitext()を使ってシーンファイルのファイルパスと拡張子をリストで取得
select_obj = cmds.ls(sl=True)
選択したオブジェクトをリストで取得
new_scene_file_path = "{}_{}{}".format(scenefile_name_ext[0],i_select_obj,scenefile_name_ext[1])
format()関数を使って「シーンファイル名_オブジェクト名.拡張子」の新ファイルパスを作る
cmds.file("{}{}".format(new_scene_file_path ,force=True,options="v=0",typ="mayaBinary",pr=True,es=True )
format()関数を使ってファイル名に拡張子「.mb」を追加し、MB(MAYAbinary)形式でエキスポート
結果:
Sceneファイル「ospath_scenes.mb」を開いて、オブジェクトを選択して実行
「シーンファイル名+オブジェクト名」のMB(MAYAbinary)形式ファイルがシーンファイルと同じディレクトリにエキスポート保存されました。
エキスポートされたmbファイルを開きました。
まとめ
Pythonでos.path()を使ったファイルパスを操作する方法を紹介しました。
os.path.basename()
ファイルパスからディレクトリパスを取得するには
os.path.dirname()
ファイルパスのディレクトリパスとファイル名を分割するには
os.path.split()
ファイルパスからファイルパス自体と拡張子を別々に取得するには
os.path.splitext()
ディレクトリパスとファイル名を結合するには
os.path.join()
|
|
BTOパソコンの草分け的ブランドFRONTIER(フロンティア) 3DCG/動画編集/ゲーム用途に合わせてCPUやGPUなどパーツを自由に選べてコスパにもこだわる方にオススメ。 |
|
|
|
|
|