2021-03-30に投稿

Python 標準ライブラリ string 文字列の操作

Pythonの標準にある文字列操作を行うためのstringモジュールについて解説します。

stringの概要

stringモジュールには基本的な文字列操作で使えるいくつかの定数と、
カスタム書式のフォーマットのためのクラスFormatter、
簡易的なテンプレートエンジンとしてつかえるTemplateクラスが定義されています。

stringの定数

アスキー文字や数字等の特定クラスの文字種がまとめられています。
アスキー文字は大文字・小文字・その両方の3つがあります。

import string

string.ascii_lowercase # => 'abcdefghijklmnopqrstuvwxyz'
string.ascii_uppercase # => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
string.ascii_letters # => 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

数字は、8・10・16進数用の文字種が定義されています。

string.digits # => '0123456789'
string.hexdigits # => '0123456789abcdefABCDEF'
string.octdigits # => '01234567'

やや特殊なものとしては以下があります。

# 句読点、文字の区切りの類
string.punctuation # => '!"#$%&\'()*+,-./:;<=>[email protected][\\]^_`{|}~'

# 印字可能な文字
string.printable
# =&gt; '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!&quot;#$%&\'()*+,-./:;&lt;=&gt;[email protected][\\]^_`{|}~ \t\n\r\x0b\x0c'

# スペースや改行
string.whitespace # => ' \t\n\r\x0b\x0c'

Formatterクラス カスタム書式のフォーマット

str.formatと同様の文字列フォーマット機能とそのカスタマイズを提供するFormatterクラスが定義されています。

以下は文字列のformatメソッドと同様の文字列を取得する例です。

from string import Formatter
f = Formatter()

args = [1, 'a']
kwargs = {'s':'XYZ', 'n':1.2}

f.vformat('{0}, {1}, {s}, {n}', args, kwargs) # => '1, a, XYZ, 1.2'
f.format('{0}, {1}, {s}, {n}', 1 , 'a', s='XYZ', n=1.2) # => '1, a, XYZ, 1.2'
f.format('{0}, {1}, {s}, {n}', *args , **kwargs) # => '1, a, XYZ, 1.2'

Templateクラス 標準のテンプレートエンジン

文字列置換の機能をもった簡易的なテンプレートエンジンとして使えるPython標準のクラスです。

Template(文字列)で置換対象元となるテンプレート文字列を指定し、
Templateのインスタンスを生成できます。

テンプレートの変数は先頭にドルマーク$を付与して記載します。

from string import Template

t = Template('<$tag>$body</$tag>')

変数置換を適用した出力結果の文字列はsubstituteメソッドに
辞書dict、あるいはキーワードで変数を指定することで得られます。

t.substitute(tag="p", body='abcde') # => '<p>abcde</p>'
t.substitute({'tag':'p', 'body':'abcd'}) # => '<p>abcd</p>'
t.substitute({'tag':'p'}, body='abcd') # => '<p>abcd</p>'

テンプレート内に存在する変数で、substituteで指定されないものがあるとエラーが発生します。

t.substitute(tag='p', b='XYZ') # => KeyError: 'body'

代わりにsafe_substituteを使うとエラーは発生せず、変数名のまま出力が行われます。

t.safe_substitute(tag='p', b='XYZ') # => '<p>$body</p>'

単語の先頭大文字化

stringには単語の先頭を大文字にする関数も定義されています。

string.capwords("this is a pen.") # => 'This Is A Pen.'
Originally published at marusankakusikaku.jp
ツイッターでシェア
みんなに共有、忘れないようにメモ

maru3kaku4kaku

Pythonこつこつ学習中。よく忘れる。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント