liquidjumper MAYA,Python [Python]文字列をreplace()・%演算子・format()で置き換える方法-MAYA アーティストのスクリプト入門-

[Python]文字列をreplace()・%演算子・format()で置き換える方法-MAYA アーティストのスクリプト入門-

maya_python_str_replace_topimage

Pythonの文字列を扱う方法は多種多様にあります。

その中で今回は、文字列の特定文字を置き換える方法を紹介します。

文章の特定の単語を違う単語に置き換えたり

私は来週の日曜日に映画館に行きます。

私は来週の日曜日に図書館に行きます。

文字列の特定箇所を様々な単語に置き換える事が出来るようにしたり

好きな果物:仮の文字列
嫌いな果物:仮の文字列
好きな季節:仮の文字列
嫌いな季節:仮の文字列

好きな果物:りんご
嫌いな果物:ドリアン
好きな季節:春
嫌いな季節:夏


Pythonの文字列を扱う方法の中でも使用頻度が高いので、しっかり覚える事をおすすめします。


Pythonでクリップボードの値を取得できる外部モジュール「pyperclip」

replace()文字列の文字を指定して置き換える方法

文字列の中にある文字を指定して置き換えるには

replace(元の文字列、置き換える文字列)

を使います。

str = "apple strawberry orange"
str_r = str.replace("apple" , "cherry")

print(str_r)


説明:

str_r = str.replace("apple" , "cherry")

文字列の中の”apple”を”cherry”に置き換える

結果:

“apple”が”cherry”に置き換わりました。

cherry strawberry orange

置き換わる回数を設定する

上記の方法で”apple”を”cherry”に置き換える事はできましたが文字列に”pineapple”を追加して実行すると

str = "apple strawberry orange pineapple"
str_r = str.replace("apple" , "cherry")

print(str_r)


結果:

“apple”だけでなく”pineapple”が”pinecherry“に置き換わってしまいました。

cherry strawberry orange pinecherry


replace()は置き換える回数を指定する事が出来ます。

str = "apple strawberry orange pineapple"
str_r = str.replace("apple" , "cherry",1)

print(str_r)


説明:

str_r = str.replace("apple" , "cherry",1)

文字列の中の”apple”を”cherry”に1回だけ置き換える

実行:

最初の”apple”だけが”cherry”に変わって”pineapple”は置き換わりません

cherry strawberry orange pineapple

%演算子の文字列を置き換える方法

事前に置き換える文字列を設定する方法があります

%演算子 を置き換える

「”xx xxx %演算子 xxx” % “置き換える文字列/値” 」
のように書くと文字列の中の%演算子を、任意の文字列/値に置き換える事ができます。

str = "primitive_name : %s" % "pCube1"

print(str) 


説明:

str = "primitive_name : %s" % "pCube1"

%s」と書くと文字列と置き換える事ができます。このコードでは文字列”pCube1″で置き換えます

結果:

「%s」が”pCube1″に置き換わりました

primitive_name : pCube1


複数の%演算子が在る場合は置き換える文字列を「()」タプルの中に入れて書きます。

str = """primitive_CubeName : %s
primitive_SphereName : %s
primitive_CylinderName : %s""" % ("pCube_001","pSphere_002","pCylinder_003")

print(str)


結果:

文字列の一番目の「%s」が”pCube_001″、二番目の「%s」が”pSphere_002″、三番目の「%s」が”pCylinder_003″に置き換わりました。

primitive_CubeName : pCube_001
primitive_SphereName : pSphere_002
primitive_CylinderName : pCylinder_003


「%s」は文字列と置き換える事ができました。

%演算子は「%s」以外に

  • 「%d」符号付き十進整数
  • 「%e」指数表記付き浮動小数点数
  • 「%f」十進浮動小数点数

等があります。

str = """primitive_Name : %s
primitive_TranslateX : %f
primitive_Num : %d""" % ("pCube_001",12.0254,43)

print(str)


説明:

「%s」は「”pCube_001″」と置き換える、「%f」は「12.0254」と置き換える、「%d」は「43」と置き換える。


結果:

%演算子の設定に沿って置き換えられました。

primitive_Name : pCube_001
primitive_TranslateX : 12.025400
primitive_Num : 43

format()関数を使って置き換える方法

format()関数を使って置き換えるには

“xx xxx {} xx”.format(“置き換える文字列”)

と書きます。

「{}」の箇所をformat()で設定した文字列/値で置き換えます。

str = "banana grape {} mango"
str_format = str.format("lemon")

print(str_format)


説明:

str = "banana grape {} mango"
str_format = str.format("lemon")

「{}」を”lemon”で置き換える

結果:

「{}」が”lemon”で置き換えられました。

banana grape lemon mango


format()で設定できるのは文字列以外も設定できます。

str = """primitive_Name : {}
primitive_TranslateX : {}
primitive_Num : {}"""
str_format = str.format("pCube_001",12.0254,43)

print(str_format)


説明:

3箇所の「{}」を、文字列の「”pCube_001″」、浮動小数点数の「12.0254」、整数の「43」で変換します。

結果:

文字列以外の数値も置き換えられました。

primitive_Name : pCube_001
primitive_TranslateX : 12.0254
primitive_Num : 43

置き換わる順番を指定する

上記の方法では3箇所の「{}」を順番に置き換えました。format()は置き換える箇所を設定する事ができます。

str = "{1} {0} {2} {0} {1}"
str_format = str.format("orange","peach","grape")

print(str_format)


説明:

str = "{1} {0} {2} {0} {1}"

format()で並べた文字列の順番をインデックスとして指定します

結果:

“{1} {0} {2} {0} {1}”インデックスで指定した順番で置き換わりました。

peach orange grape orange peach

キーワードを設定する

str = """primitive_Name : {name}
primitive_TranslateX : {translate}
primitive_Num : {num}"""
str_format = str.format(num = 12 , translate = 33.5807 , name = "pCylinder_003")

print(str_format)


説明:

format()で「name = “pCylinder_003″」の様にキーワードど文字列/値を組に、そして「{}」にキーワードを設定します。

結果:

format()の並び順に関係なくキーワード設定した「{}」が置き換わりました。

primitive_Name : pCylinder_003
primitive_TranslateX : 33.5807
primitive_Num : 12

MAYAで応用:文字列置き換えの方法を使ってオブジェクトの値を取得する

文字列の置き換えを使ってMAYAで選択したオブジェクトの値を取得するスクリプトを書いてみます。

import maya.cmds as cmds


objs_value_list=[]
select_list = cmds.ls(sl=True)

for i_select_list in select_list:
    tra_x = cmds.getAttr("%s.translateX" % i_select_list)
    tra_y = cmds.getAttr("%s.translateY" % i_select_list)
    tra_z = cmds.getAttr("%s.translateZ" % i_select_list)
    sca_x = cmds.getAttr("%s.scaleX" % i_select_list)
    sca_y = cmds.getAttr("%s.scaleY" % i_select_list)
    sca_z = cmds.getAttr("%s.scaleZ" % i_select_list)
    obj_value = "name:{name} translate=({tx}, {ty}, {tz}) scale=({sx}, {sy}, {sz})"
    obj_value_format = obj_value.format(name=i_select_list,tx=tra_x,ty=tra_y,tz=tra_z,sx=sca_x,sy=sca_y,sz=sca_z)
    objs_value_list.append(obj_value_format)

print(objs_value_list)


説明:

select_list = cmds.ls(sl=True)

選択したオブジェクトをリストにします

    tra_x = cmds.getAttr("%s.translateX" % i_select_list)
    tra_y = cmds.getAttr("%s.translateY" % i_select_list)
    tra_z = cmds.getAttr("%s.translateZ" % i_select_list)
    sca_x = cmds.getAttr("%s.scaleX" % i_select_list)
    sca_y = cmds.getAttr("%s.scaleY" % i_select_list)
    sca_z = cmds.getAttr("%s.scaleZ" % i_select_list)

リストをfor文で処理します。
オブジェクトのアトリビュート値を取得する為に
「”オブジェクト名.アトリビュート”」にする必要があるので
%演算子を使って「”%s.translateX” % i_select_list」としました。


obj_value = "name:{name} translate=({tx}, {ty}, {tz}) scale=({sx}, {sy}, {sz})"
    obj_value_format = obj_value.format(name=i_select_list,tx=tra_x,ty=tra_y,tz=tra_z,sx=sca_x,sy=sca_y,sz=sca_z)

format()のキーワードの方法を使って、オブジェクトの値を文字列としてまとめました。

objs_value_list.append(obj_value_format)リストにformat()でまとめた文字列を追加します。


結果:

CylinderとSphereのオブジェクトを選択して実行しました。

CylinderとSphereのオブジェクトを選択して実行しました。


オブジェクトの名前とTranslate、Scaleの値が文字列がリストで出力されました。

[‘name:pCylinder8 translate=(-2.22067849434, -1.56702877661, -1.24928163026) scale=(1.32053463775, 0.678316596023, 1.32053463775)’, ‘name:pSphere1 translate=(0.895274563996, 0.432557591966, 0.0) scale=(0.28651432055, 1.7, 1.4)’]

まとめ

Pythonの文字列を置き換える方法を紹介しました。

文字列の中にある文字を指定して置き換えるには
replace(元の文字列、置き換える文字列)

%演算子 を置き換える方法は
“xx xxx %演算子 xxx” % “置き換える文字列/値” 

format()関数を使って置き換えるには
“xx xxx {} xx”.format(“置き換える文字列”)

Pythonに限らずプログラミングで文字列を扱う機会は何かと頻繁にあります。

今回紹介したい以外にも文字列の扱い方法はまだまだ沢山あるので、効率的な書き方を探してみるのも良いと思います。







【TechAcademy/テックアカデミー】

週2回のビデオチャットや、毎日のチャットサポート、現役プロのメンターから課題のレビューを無制限に受けられる等、 マンツーマンのサポートで基礎からしっかり学習できます。

機械学習の基礎が学べる「Pythonコース」
短期間でPython・機械学習が学べるコースPythonを基礎から学び、機械学習プログラムの開発をめざします。
Unityコース
短期間でゲームアプリを開発出来るようになるコースUnityの操作方法とゲームを動かす為のスクリプト、C#を学べます。


𝕏 ( 旧Twitter ) Facebook Pocket LINE はてブ

おすすめの関連記事



あわせてよく読まれている記事

タグ: