Pythonで文字列生成(引用符、strコンストラクタ)
Pythonの文字列(str
型オブジェクト)はシングルクォート'
、ダブルクォート"
およびそれらを3つつなげたトリプルクォート('''
, """
)で囲んで記述する。またstr()
で他の型のオブジェクトを文字列に変換することも可能。
シングルクォート(単一引用符、一重引用符): '
シングルクォート(単一引用符、一重引用符)'
で囲むと文字列(str
型オブジェクト)となる。
s = 'abc'
print(s)
# abc
print(type(s))
# <class 'str'>
ダブルクォート(二重引用符): "
ダブルクォート(二重引用符)"
で囲んでも文字列(str
型オブジェクト)となる。
s = "abc"
print(s)
# abc
print(type(s))
# <class 'str'>
シングルクォートとダブルクォートの違い
どちらでも値は等価
シングルクォート'
でもダブルクォート"
でも値としては等価。
s_sq = 'abc'
s_dq = "abc"
print(s_sq == s_dq)
# True
文字列中の引用符の扱いが異なる
シングルクォート'
とダブルクォート"
では文字列中の引用符の扱いが異なる。
シングルクォート'
で囲んだ文字列中ではダブルクォート"
をそのまま使えるが、シングルクォート'
はバックスラッシュでエスケープして\'
と記述する必要がある。
ダブルクォート"
を\"
と記述しても問題はない。
s_sq = 'a\'b"c'
print(s_sq)
# a'b"c
s_sq = 'a\'b\"c'
print(s_sq)
# a'b"c
反対にダブルクォート"
で囲んだ文字列中ではシングルクォート'
はそのまま使えるが、ダブルクォート"
は\"
とする必要がある。
シングルクォート'
を\'
と記述しても問題はない。
s_dq = "a'b\"c"
print(s_dq)
# a'b"c
s_dq = "a\'b\"c"
print(s_dq)
# a'b"c
記述方法(書き方)の違いなのでどちらでも値としては等価。例えば文字列中に"
を含めたい場合は'
で囲んだほうがバックスラッシュでエスケープしなくていいので楽。逆も同様。
s_sq = 'a\'b"c'
s_dq = "a'b\"c"
print(s_sq == s_dq)
# True
トリプルクォート(三重引用符): '''
, """
シングルクォート'
、ダブルクォート"
を3つつなげたトリプルクォート('''
, """
)で囲んでも文字列(str
型オブジェクト)となる。トリプルクォート(三重引用符)という文字があるわけではないので注意。
改行をそのまま記述可能
シングルクォートやダブルクォートで囲んだ文字列は改行して複数行にするとエラーとなり、改行を表すには改行コード(\n
など)を使う必要がある。
# s = 'abc
# xyz'
# SyntaxError: EOL while scanning string literal
s = 'abc\nxyz'
print(s)
# abc
# xyz
トリプルクォートで囲んだ文字列の中では改行をそのまま記述できる。
s_tq = '''abc
xyz'''
print(s_tq)
# abc
# xyz
print(type(s_tq))
# <class 'str'>
あえてトリプルクォートを使う必要はないが、改行が含まれていなくても問題ない。
s_tq = '''abc'''
print(s_tq)
# abc
シングルクォートとダブルクォート
シングルクォート3つ'''
とダブルクォート3つ"""
の違いは文字列中でのそれぞれの引用符('
, "
)の扱い。'''
の中では"
を、"""
の中では'
をそのまま使える。値としては等価。
s_tq_sq = '''\'abc\'
"xyz"'''
print(s_tq_sq)
# 'abc'
# "xyz"
s_tq_dq = """'abc'
\"xyz\""""
print(s_tq_dq)
# 'abc'
# "xyz"
print(s_tq_sq == s_tq_dq)
# True
インデントの注意
インデントを合わせようとして行頭に空白を入れると、空白を含む値となる。
s_tq = '''abc
xyz'''
print(s_tq)
# abc
# xyz
改行コードと括弧を利用して以下のように書く方法がある。
s_multi = ('abc\n'
'xyz')
print(s_multi)
# abc
# xyz
詳細は以下の記事を参照。
他の型を文字列(str型)に変換: str()
str()
を使うと他の型のオブジェクトを文字列(str
型オブジェクト)に変換できる。
str()
は対象のオブジェクトの__str__()
メソッドの結果を返し、__str__()
メソッドが定義されていない型の場合はrepr()
の結果を返す。
以下、代表的な型の例を示す。
数値を文字列に変換
整数int
や浮動小数点数float
をstr()
で文字列str
に変換する。
i = 100
s_i = str(i)
print(s_i)
# 100
print(type(s_i))
# <class 'str'>
f = 0.123
s_f = str(f)
print(s_f)
# 0.123
print(type(s_f))
# <class 'str'>
たとえば整数int
は16進数、浮動小数点数float
は指数表記など様々な書式で記述できるが、str()
で文字列に変換するとプレーンな書式の文字列に変換される。
i = 0xFF
print(i)
# 255
s_i = str(i)
print(s_i)
# 255
f = 1.23e+10
print(f)
# 12300000000.0
s_f = str(f)
print(s_f)
# 12300000000.0
書式を指定して文字列に変換したい場合は組み込み関数format()
を使う。
s_i_format = format(i, '#X')
print(s_i_format)
# 0XFF
s_f_format = format(f, '.2e')
print(s_f_format)
# 1.23e+10
反対に数字の文字列を数値に変換したい場合は以下の記事を参照。
リストや辞書を文字列に変換
リストlist
や辞書dict
をstr()
で文字列str
に変換する。
l = [0, 1, 2]
s_l = str(l)
print(s_l)
# [0, 1, 2]
print(type(s_l))
# <class 'str'>
d = {'a': 1,
'b': 2,
'c': 3}
s_d = str(d)
print(s_d)
# {'a': 1, 'b': 2, 'c': 3}
print(type(s_d))
標準ライブラリのpprintモジュールのpformat()
を使うと整形した文字列に変換できる。
import pprint
dl = {'a': 1, 'b': 2, 'c': [100, 200, 300]}
s_dl = str(dl)
print(s_dl)
# {'a': 1, 'b': 2, 'c': [100, 200, 300]}
p_dl = pprint.pformat(dl, width=10)
print(p_dl)
# {'a': 1,
# 'b': 2,
# 'c': [100,
# 200,
# 300]}
print(type(p_dl))
# <class 'str'>
引数の設定などpprintについての詳細は以下の記事を参照。