[Python文字列]os.path()でファイルパスを操作する方法-MAYA アーティストのスクリプト入門-

maya_python_os_path_topimage

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」を抜き出しました。

testfile.txt

ディレクトリパスから最後のフォルダ名(ディレクトリ名)を抜き出す

os.path.basename()を使ってファイルパスからファイル名を抜き出せました。

ただこのbasename()はファイルパスからファイル名を抜き出す機能ではなく、パスから最後の文字列を抜き出す機能と理解する方が正しく扱えると思います。

なのでパスの最後がファイル名ではなく、フォルダ名(ディレクトリ名)であれば

import os

path = "./test/test2/test_dir"
basename_path = os.path.basename(path)
print(basename_path)


結果:

パスの最後のフォルダ名(ディレクトリ名)が抜き出せます。

test_dir

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(ファイルパス)でディレクトパスを取得できます

結果:

ファイルパスからディレクトリパスが取得されました。

./test/test2/test3

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(ファイルパス)でディレクトリパスとファイル名に分割できます

結果:

ディレクトリパスとファイル名がリストで返されました

('./test/test_dir', 'test_file.txt')

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(ファイルパス)でファイルパスから拡張子を分離します

結果:

ファイルパスから拡張子が外れリストで返されました。

('./test/test_dir/test_file', '.txt')

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(ディレクトリパス,ファイル名)で結合します

結果:

ディレクトリパスとファイル名の間に「/」区切り文字が追加されて出力されました。

./test/test_dir/test_file.txt


上記の例ではディレクトパスとファイル名を結合しましたが
ディレクトリ間を結合することもできます。

import os

dir_path = os.path.join("dir_a","dir_b","dir_c","dir_d")
print(dir_path)


結果:

「/」区切り文字で全て結合されました

dir_a/dir_b/dir_c/dir_d

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」を開いて、オブジェクトを選択して実行

Sceneファイル「ospath_scenes.mb」
Sceneファイル「ospath_scenes.mb」でpCylinder1とpSphere1を選択


「シーンファイル名+オブジェクト名」のMB(MAYAbinary)形式ファイルがシーンファイルと同じディレクトリにエキスポート保存されました。

「シーンファイル名+オブジェクト名」

エキスポートされたmbファイルを開きました。

ospath_scenes_pCylinder1.mb
ospath_scenes_pCylinder1.mb
ospath_scenes_pSphere1.mb
ospath_scenes_pSphere1.mb

まとめ

Pythonでos.path()を使ったファイルパスを操作する方法を紹介しました。

ファイルパスからファイル名を抜き出すには
os.path.basename()

ファイルパスからディレクトリパスを取得するには
os.path.dirname()

ファイルパスのディレクトリパスとファイル名を分割するには
os.path.split()

ファイルパスからファイルパス自体と拡張子を別々に取得するには
os.path.splitext()

ディレクトリパスとファイル名を結合するには
os.path.join()

Twitter Facebook Pocket LINE はてブ

おすすめの関連記事:
コチラの記事も読まれています
あわせてよく読まれている記事