[Python入門]文字列の操作:Python入門(4/4 ページ)
Pythonの文字列はさまざまに操作できる。文字数の取得、要素の取り出し、文字列に特定の文字列が含まれているかの判定、文字列の置換などを紹介する。
文字列の置換:replace/swapcase/title/lower/upperメソッド
ここまでに「文字列は変更できない」と述べているが、元の文字列の内容を置き換えた新しい文字列を作成するメソッドもある。既に見た「strip/lstrip/rstripメソッド」もそうしたメソッドである。
ここでは以下のメソッドについて簡単に見ておこう。
- 元の文字列.replace(old, new, count)
引数:old 置換元の文字列
引数:new 置換後の文字列
引数:count 置換を行う回数(省略時は、元の文字列に含まれる全てのoldがnewに置換される)
戻り値:元の文字列内にある「置換元の文字列」を「置換後の文字列」で置き換えた新しい文字列 - 元の文字列.swapcase()
戻り値:元の文字列の大文字/小文字を入れ替えた新しい文字列 - 元の文字列.title()
戻り値:元の文字列に含まれている単語の先頭文字だけを大文字にした新しい文字列を作成 - 元の文字列.lower()
戻り値:文字列内の全ての英字を小文字にした文字列を新しい作成 - 元の文字列.upper()
戻り値:文字列内の全ての英字を大文字にした文字列を新しい作成
以下に例を示す。
sample_str = 'abc def GHI JKL'
print(sample_str.replace('abc', 'xyz'))
print(sample_str.swapcase())
print(sample_str.title())
print(sample_str.lower())
print(sample_str.upper())
以下に実行結果を示す。
各メソッドの動作を確認してほしい。
特定のフレーズで始まっている/終わっているかを調べる:startswith/endswithメソッド
文字列の先頭が特定のフレーズで始まっているかを調べたり、特定のフレーズで終わっているかを調べたりすることも可能だ。これには以下のメソッドを使用する。
- 元の文字列.startswith(prefix)
引数:prefix それで始まっているかを調べたいフレーズ
戻り値:文字列がprefixで指定されたフレーズで始まっていればTrue、そうでなければFalseを返す - 元の文字列.endswith(suffix)
引数:suffix それで終わっているかを調べたいフレーズ
戻り値:suffixで指定したフレーズで文字列が終わっていればTrue、そうでなければFalseを返す
以下に例を示す。
sample_str = 'this is a sample string'
print(sample_str.startswith('this'))
print(sample_str.endswith('string'))
実行結果を以下に示す。
かっこ「()」で囲んで複数のフレーズを指定することも可能だ。この場合、いずれかのフレーズで開始あるいは終了していればTrueが、そうでなければFalseが返される。
sample_str = 'this is a sample string'
print(sample_str.startswith(('that', 'those')))
print(sample_str.endswith(('sample', 'ing')))
以下に実行結果を示す。
なお、これらのメソッドでも調べ始める位置と調べ終わる位置のインデックスを指定可能だ。
指定したプレフィックス/サフィックスを削除する:removeprefix/removesuffixメソッド
Python 3.9以降では文字列が特定の文字列で始まる、または終わる場合に、それらを削除した文字列を返すremoveprefix/removesuffixメソッドが使用できる。
- 元の文字列.removeprefix(prefix)
引数:prefix プレフィックス。元の文字列がprefixに指定した文字列で始まっていれば、それを削除する
戻り値:プレフィックスを削除した文字列 - 元の文字列.removesuffix(suffix)
引数:suffix サフィックス。元の文字列がsuffixに指定した文字列で終わっていれば、それを削除する
戻り値:サフィックスを削除した文字列
以下に使用例を示す。
sample_str = 'my_document.txt'
print(sample_str.removeprefix('my'))
print(sample_str.removesuffix('.txt'))
実行結果を以下に示す。
文字列の先頭/末尾から特定の文字列を削除するには既に述べたstrip/lstrip/rstripメソッドもあるが、その挙動の違いについては注意しよう。これらは引数に複数の文字を指定すると、それらの文字の組み合わせ全てが削除の対象となる。
例えば、上の例で使った「my_document.txt」という文字列から末尾の「.txt」を取り除きたいとしよう(ファイル名から拡張子を取り除くのはよくある処理だ)。文字列末尾から特定の文字列を削除するにはrstripメソッドが使えそうだ。そこで以下のようなコードを書いたとする。
sample_str = 'my_document.txt'
print(sample_str.rstrip('.txt'))
実行結果を以下に示す。
このように、「my_document」の最後にある「t」まで削除されてしまった。これは上で述べた通り、rstripメソッドなどでは引数に与えた文字列の全ての組み合わせが削除の対象となるからだ。つまり、文字列末尾にある「.」「t」「x」「t」の全てを組み合わせた「t.txt」が取り除かれるからだ。
これでは使い勝手がよくないということで、特定の文字列で始まる/終わる場合にそれらを削除できるように、これら2つのメソッドが追加されている。
文字列を左寄せ/中央寄せ/右寄せする:ljust/center/rjustメソッド
文字列を、指定した長さの文字列の中で左寄せ/中央寄せ/右寄せした新しい文字列を作成することも可能だ。
- 元の文字列.ljust(width, fillchar)
引数:width 新しく作成する文字列の文字数
引数:fillchar 元の文字列の長さよりもwidthの値の方が大きいときには、fillcharに指定した文字で足りない部分が埋められる(省略時は空白文字が使われる)
戻り値:widthで指定された長さの文字列を作成して、その中で元の文字列を左寄せに位置させる - 元の文字列.center(width, fillchar)
引数:width 新しく作成する文字列の文字数
引数:fillchar 元の文字列の長さよりもwidthの値の方が大きいときには、fillcharに指定した文字で足りない部分が埋められる(省略時は空白文字が使われる)
戻り値:widthで指定された長さの文字列を作成して、その中で元の文字列を中央寄せに位置させる - 元の文字列.rjust(width, fillchar)
引数:width 新しく作成する文字列の文字数
引数:fillchar 元の文字列の長さよりもwidthの値の方が大きいときには、fillcharに指定した文字で足りない部分が埋められる(省略時は空白文字が使われる)
戻り値:widthで指定された長さの文字列を作成して、その中で元の文字列を右寄せに位置させる
これら3つのメソッドは全て、新しく作成する文字列の長さ(文字数)と元の文字列の左右を埋める文字を引数として受け取る(後者は省略可能で、省略した場合は空白文字で元の文字列以外の部分が埋められる)。よって、これらは「'文字列'.center(文字数, '文字埋めに使う文字')」のような形式で呼び出す。
以下に例を示す。
sample_str = 'Python'
print(sample_str.ljust(12, '+'))
print(sample_str.center(12, '*'))
print(sample_str.rjust(12))
以下に実行結果を示す。
いずれの例も、元の文字列の長さが「6」文字で、新しい文字列の長さを「12」文字としているので、新しく作成する文字列では元の文字列の左右が、指定された文字で埋められる。ただし、最後の例では、rjustメソッド呼び出しで、文字埋めに使う文字を指定していないので、空白文字が使われている。なお、新しい文字列の長さが元の文字列の長さよりも短いときには元の文字列が返される。
まとめ
今回は、文字列を操作するための関数やメソッド、演算子を実例と共に紹介した。幾つかのメソッドはここでは取り上げていないが、それらについても機会を見て紹介したいところだ。次回は、そうしたメソッドのうち、非常に高機能(なので説明に多くのページが必要)なものであるformatメソッドを取り上げる。
今回のまとめ:文字列の操作
- 文字列の文字数を求めるにはlen関数が使える
- 文字列の要素はインデックス指定やスライスの指定により取り出せる
- 文字列の要素は変更できない
- リテラル文字列は、それらを並べるだけで結合できる。そうでなければ「+」演算子を使う
- 文字列と数値は「+」演算子で加算(結合)できない
- 「文字列 * 整数値」「整数値 * 文字列」で「整数値」だけ「文字列」を繰り返したものが得られる
- 文字列に特定の文字列が含まれているかは、in演算子、find/rfind/index/rindexメソッドで調べられる。前者は存在確認だけを行いたいとき、後者はインデックス位置までを知りたいときに使う
- 文字列の分割にはsplitメソッドを使う
- リストの要素を文字列へ結合するにはjoinメソッドを使う
- 文字列の前後にある空白文字を削除するにはstrip/lstrip/rstripメソッドを使う
- 文字列が数字/英字などで構成されているかを調べるにはisupper/islower/isdigitメソッドを使う
- 元の文字列の内容を置換して、新たな文字列を得るにはreplace/swapcase/title/lower/upperメソッドを使う
- 文字列が特定のフレーズで始まっている/終わっているかを調べるにはstartswith/endswithメソッドを使う
- 文字列を左寄せ/中央寄せ/右寄せするにはljust/center/rjustメソッドを使う
- 文字列が特定の文字列で始まっている/終わっている場合に、それらを削除するにはremoveprefix/removesuffixメソッドを使う
- 文字列を変更するメソッドは、元の文字列に対する変更内容を反映した「新しい文字列」を作成する
「Python入門」
Copyright© Digital Advantage Corp. All Rights Reserved.