[Python 文字列]位置を指定して文字を抽出する方法-MAYA アーティストのスクリプト入門-

maya_python_string_slice_topimage

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

その中で今回は、文字列の位置を指定して文字を抽出する方法を紹介します。

「ファイルの名前を取得できたけど頭文字と末尾の数字は必要ない」

など、文字列の必要な部分だけを抽出する場合に使われます。

この記事で紹介する方法はとても簡単に扱えますが、ちょっと混乱する可能性もあるのでしっかり読んでみてください。

文字列の数(サイズ)を知る方法

文字列の サイズ つまり文字数を知る方法は

len(文字列)

で取得できます。

len()はリスト等のサイズを取得する時に使いますが文字列の文字数(サイズ)を取得する事もできます。

※listについての詳しい解説は別の記事で紹介しています。是非読んでみてください。
Python list 配列を知らないと何も始まらない MAYAアーティストのスクリプト入門


例:

str = "fukushima"

print(len(str))


結果:

9

“fukushima”は9文字なのが分かりました。


この記事で紹介する方法は文字の位置を指定して目的の文字を抽出する方法です。
文字列のサイズ(文字数)を理解した上で先に勧めます。

インデックス 文字列の位置を指定して文字を抽出

文字列のインデックス(文字の位置)を指定して目的の文字を取得するには

文字列[インデックス(文字の位置)]

で取得できます。

例:

str = "kagoshima"

print(str[5])


結果:

h

“kagoshima”のインデックス(文字の位置)「5」 の 「h」 が返されました。

一瞬 5 番目は 「s」 なんじゃないの?

と思ってしまいますが インデックス(文字の位置)は以下の様に表せます。

kagoshima
012345678

一文字づつ0番目から数えるので、”kagoshima”のインデックス「5」は「h」になります。

これを踏まえて

例:

str = "kagoshima"

print(str[-5])


結果:

s

“kagoshima”のインデックス(文字の位置)「-5」 の 「s」 が返されました。

「-」負の値を指定した場合は文字列の後ろから数えます

kagoshima
-9-8-7-6-5-4-3-2-1

-1番目を先頭に「-5」番目が「s」になります。

スライス 文字列の範囲を指定して文字を抽出

文字列から範囲を指定して文字を抽出できる

スライス

という機能があります。

始まりのインデックス(文字の位置)終わりのインデックス(文字の位置)を指定する

文字列の中から範囲を指定して目的の文字又は文字列を取得するには

文字列[始まりのインデックス(文字の位置):終わりのインデックス(文字の位置)]

と表記します。始まりと終わりのインデックスの間に「:」を記します。

例:

str = "tokushima"

print(str[1:5])


結果:

okus

始まりのインデックスと終わりのインデックスの間の文字が抽出されました。

“tokushima”のインデックス番号を表すと

tokushima
012345678

これを観るとわかるように、指定したインデックスから取得できる範囲は

始まりのインデックスから終わりのインデックスの前まで

が指定して取得する範囲になります。

始まりのインデックス(文字の位置)又は終わりのインデックス(文字の位置)のどちらかを指定する

始まりのインデックスが0番又は終わりのインデックスが文字列の最後までを指定する場合は省略できます。

その場合は

文字列[始まりのインデックス(文字の位置):]

又は

文字列[:終わりのインデックス(文字の位置)]

と表記します。

例:

str = "hiroshima"

print(str[2:])

print(str[:4])


結果:

#str[2:]
roshima

#str[:4]
hiro

“hiroshima”のインデックス番号を表すと

hiroshima
012345678

str[2:]は始まりのインデックス番号「2」からなので 「r」から最後の文字までを表します。

str[:4]は終わりのインデックス番号「4」までなので「s」より前の文字列「h」から「o」までを表します。

インデックス(文字の位置)に「-」負の数字を指定する

例:

str = "hiroshima"

print(str[-2:])

print(str[:-4])


結果:

#str[-2:]
ma

#str[:-5]
hiro

負の数字を指定した”hiroshima”のインデックス番号を表すと

hiroshima
-9-8-7-6-5-4-3-2-1

str[-2:]は始まりのインデックス番号が「-2」からなので「m」から最後の文字までを表します。

str[:-5]は終わりのインデックス番号が「-5」までなので「s」より前の文字列すべて 「h」から「o」までを表します。

Pythonの文字列処理を使ったMAYAのスクリプト

スクリプト内容
「オブジェクト”pCone”だけを青色に変える」

import maya.cmds as cmds

selectedObj_list = cmds.ls(sl=True)

for i_obj in selectedObj_list:
    if "pCone" == i_obj[:5]:
        cmds.polyColorPerVertex(i_obj,rgb=(0.0, 0.0, 1.0), cdo=True )


解説:

selectedObj_list = cmds.ls(sl=True)

オブジェクトを選択してリストにする

    if "pCone" == i_obj[:5]:

i_obj[:5]でオブジェクト名の最初の5文字を抽出。if文で”pCone”の同じ文字列か否かを判別

cmds.polyColorPerVertex(i_obj,rgb=(0.0, 0.0, 1.0), cdo=True )

オブジェクト名の最初の5文字が “pCone” の メッシュオブジェクトを青色に変える。



オブジェクトを全て選択してスクリプトを実行

selected objs
selected objs image


実行結果:

最初の5文字が “pCone” のオブジェクト名だけが選ばれて青色に変わりました。

color pCone

まとめ

Pythonの文字列処理の中からスライス「位置を指定して文字を抽出する方法」を紹介しました。

  • 文字列の サイズ つまり文字数を知る方法は
    len(文字列)
  • 文字列のインデックス(文字の位置)を指定して目的の文字を取得するには
    文字列[インデックス(文字の位置)]
  • 文字列の中から範囲を指定して目的の文字又は文字列を取得するには
    文字列[始まりのインデックス(文字の位置):終わりのインデックス(文字の位置)]
  • 始まりのインデックス又は終わりのインデックスを省略する場合は
    文字列[始まりのインデックス(文字の位置):]
    文字列[:終わりのインデックス(文字の位置)]

以上です。

おすすめの関連記事:
コチラの記事も読まれています
No Post found