Pythonで文字列生成(引用符、strコンストラクタ)

Pythonの文字列(str型オブジェクト)はシングルクォート'、ダブルクォート"およびそれらを3つつなげたトリプルクォート(''', """)で囲んで記述します。またstr()で他の型のオブジェクトを文字列に変換することもできます。 ここでは以下の内容について説明します。

シングルクォート(一重引用符): ' ダブルクォート(二重引用符): " シングルクォートとダブルクォートの違い どちらでも値は等価 文字列中の引用符の扱いが異なる トリプルクォート(三重引用符): ''', """ 改行をそのまま記述可能 シングルクォートとダブルクォート インデントの注意 他の型を文字列(str型)に変換: 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型オブジェクト)に変換できます。

  1. 組み込み型 str() — Python 3.6.5 ドキュメント

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

format()についての詳細は

また、反対に数字の文字列を数値に変換したい場合は

リストや辞書を文字列に変換

リスト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'>
Last Updated: 6/26/2019, 10:34:03 PM