Pythonで、文字列を扱う方法を見ていきます。
後半では、文字列操作で使う関数をいくつか紹介します。
文字列を定義する
文字列を定義するには、シングルコーテーション「’」かダブルコーテーション「”」のいずれかで文字列を囲みます。
どちらでも同じです。
'文字列'
"文字列"
また、三重引用符「”””」で囲む方法もあります。
この場合、複数行に渡る文字列を定義することができます。
"""
1行目
2行目
3行目
"""
文字列の中に、シングルコーテーション、もしくは、ダブルコーテーションを含めたい場合は、エスケープする必要があります。
'文字列の中に\'を含めたい場合'
"文字列の中に\"を含めたい場合"
これらは、以下のように定義することもできます。
"文字列の中に'を含めたい場合"
'文字列の中に"を含めたい場合'
\マーク(バックスラッシュ)から始まる文字列は、後ろに続く文字よって特別な意味を持つものがあります。
例えば、\’や\”は、それぞれ、シングルコーテーション、ダブルコーテーションを意味します。これらは、エスケープシーケンスと呼ばれます。他にも、以下のようなものがあります。
\\ | \マークを表します |
\t | タブを表します |
\n | 改行(ASCII 行送り(LF))を表します |
\newline | バックスラッシュと改行文字が無視されます |
エスケープシーケンス処理を無効にする、すなわち、エスケープシーケンスに特別な意味をもたせたくない場合には、文字列定義の先頭(シングルコーテーションやダブルコーテーション)の前に接頭辞rをつけてあげます。
>>> print('改行を表すエスケープシーケンス\n')
改行を表すエスケープシーケンス
>>> print(r'改行を表すエスケープシーケンス\n')
改行を表すエスケープシーケンス\n
上の最初の例では、\nが改行として出力されていますが、下の例では、文字列\nとしてそのまま表示されているのがわかります。
ただし、\’や\”はそのまま出力することはできず、エラーとなります。
これは、シングルコーテーションやダブルコーテーションそれ自体が文字列の区切りとして理解されてしまうためです。
>>> r'文字列の中に'を含めたい場合'
File "<stdin>", line 1
r'文字列の中に'を含めたい場合'
フォーマット文字列
formatメソッドを用いることで、文字列の埋め込みや表示形式の設定を行うことができます。
str.format(*args, **kwargs)
例えば、こんか感じで使うことができます。
>>> template = '私の名前は、{}です。{}歳です。'
>>> print(template.format('太郎', 12))
私の名前は、太郎です。12歳です。
>>> print(template.format('花子', 8))
私の名前は、花子です。8歳です。
埋め込みたい部分を{}で書いて、formatメソッドの引数として渡してあげるだけです。formatメソッドに渡す引数の順番に注意してください。
また、埋め込みたい部分に名前をつけてあげることもできます。
>>> print(template.format(name = '太郎', age = 12))
私の名前は、太郎です。12歳です。
>>> print(template.format(age = 8, name = '花子'))
私の名前は、花子です。8歳です。
こちらの方法では、名前で指定するため順番は関係ありません。
次に表示形式を整える方法を列挙します。
文字列の長さを指定する
30桁で、右揃え、左揃え、中央に表示します。
>>> print('"{:>30}"'.format('右揃え'))
" 右揃え"
>>> print('"{:<30}"'.format('左揃え'))
"左揃え "
>>> print('"{:^30}"'.format('中央揃え'))
" 中央揃え "
任意の文字列で指定桁数まで文字を埋め込みます。
>>> print('"{:*>30}"'.format('右揃え'))
"***************************右揃え"
>>> print('"{:*<30}"'.format('左揃え'))
"左揃え***************************"
>>> print('"{:*^30}"'.format('中央揃え'))
"*************中央揃え*************"
数値の表示形式を指定する
小数点以下の桁数を指定して表示する。
>>> from math import pi
>>> print('{:.2f}'.format(pi))
3.14
>>> print('{:.3f}'.format(pi))
3.142
有効桁数を指定する。
>>> x = 123.4567
>>> print('{:.4}'.format(x))
123.5
>>> print('{:.3}'.format(x))
1.23e+02
>>> print('{:.2}'.format(x))
1.2e+02
>>> print('{:.1}'.format(x))
1e+02
3桁ごとにカンマで区切る。
>>> print('{:,}'.format(y))
1,234,567,890
2進数、8進数、10進数、16進数で表示する。
>>> z = 10
>>> print('{:b}'.format(z)) #2進数表記
1010
>>> print('{:o}'.format(z)) #8進数表記
12
>>> print('{:d}'.format(z)) #10進数表記
10
>>> print('{:x}'.format(z)) #16進数表記
a
%表記する。
>>> p = 0.1234
>>> print('{:.2%}'.format(p))
12.34%
>>> print('{:.1%}'.format(p))
12.3%
文字列メソッド
文字列(strオブジェクト)に定義されているメソッドの使い方を見ていきます。
先頭の文字を大文字にする capitalize()
>>> str1 = 'hello world!'
>>> print(str1.capitalize())
Hello world!
文字列を小文字に変換する lower()
> str2 = 'Hello World!'
>>> print(str2.lower())
hello world!
文字列を大文字に変換するupper()
>>> str1 = 'hello world!'
>>> print(str1.upper())
HELLO WORLD!
リストの文字列を結合するjoin()
>>> strlist = ['abc', 'def', 'ghi']
>>> print(strlist)
['abc', 'def', 'ghi']
>>> print(''.join(strlist))
abcdefghi
>>> print('/'.join(strlist))
abc/def/ghi
文字列を置換するreplace()
>>> str = 'Hello World!'
>>> print(str.replace('World', 'ワールド'))
Hello ワールド!
文字列を分割するsplit()
>>> str = 'a,b,c,d,e,f,g'
>>> print(str.split(','))
['a', 'b', 'c', 'd', 'e', 'f', 'g']
文字列オブジェクトには、他にもたくさんのメソッドが定義されています。こちらからご確認ください。
一点、文字列中のすべての文字が英字かつ1文字以上の場合にTrueを返す、isslpha()メソッドですが、、、
文字列中に日本語が混じっていてもTrueを返しますのでご注意を!
この場合、Falseを返すようにしたいなら、正規表現を使うのが吉のようです。
コメント