【Python】文字列の使い方 【str型】

Python

この記事では、Pythonの文字列の使い方について解説します。Pythonには、文字列を扱うためのstr型というデータ型が用意されています。str型には、とても便利なメソッドや機能が多く用意されています。

文字列は、シーケンス型の一員です。シーケンス型については以下の記事を参照してください。

【Python】シーケンス型とは?【シーケンス型の使い方】【Python】シーケンス型とは?【シーケンス型の使い方】
この記事で学べること
  • 文字列の基本的な使い方
  • エスケープシーケンス
  • 文字列のフォーマット
  • 文字列のメソッド

文字列の宣言・初期化

文字列は、シングルクォーテーション、またはダブルクォーテーションで囲むことで表現することができます。

s = ''
s = ""

str()を使って宣言することもできます。

s = str()

クォーテーションの間に文字を記述することで初期値を指定できます。

s = '文字列'

s = "文字列"

クォーテーション3つで囲むことで、複数行に渡って文字列を記述できます。

s = '''文字列
です'''

s = """文字列
です"""

サンプル

文字列を定義して出力してみます。

s = '文字列'
print(s)

s = '''複数行
文字列'''
print(s)

実行結果

文字列
複数行
文字列

エスケープシーケンス(特殊文字)

エスケープシーケンスとは、改行やタブなどの普通では表現できない文字を表現するための記述方法です。

エスケープシーケンス

\n改行
\tタブ
\’シングルクォーテーション
\”ダブルクォーテーション

サンプル

試しにエスケープシーケンスを含んだ文字列を出力してみます。

s = '\tHello\n\tWorld'

print(s)

実行結果

	Hello
	World

このように、エスケープシーケンスを使うことで文字列中に改行やタブを記述することができます。

文字列中のクォーテーション

Pythonでは、以下のように文字列中に使用していないクォーテーションを記述することで、エスケープシーケンスを使わずともクォーテーションを記述できます。

print('a"b"c')
print("d'e'f")

実行結果

a"b"c
d'e'f

文字列の演算

文字列には、演算子を用いた処理が用意されています。

文字列 + 文字列

文字列を連結させることができます。

text1 = '昔はお前のような冒険者だったが、'
text2 = '膝に矢を受けてしまってな...。'

print(text1 + text2)

実行結果

昔はお前のような冒険者だったが、膝に矢を受けてしまってな...。

+=演算子で演算した結果をそのまま変数に代入できます。

text = '明日からがんばるんじゃない・・・'
text += '今日…今日だけがんばるんだっ・・・!'

print(text)

実行結果

明日からがんばるんじゃない・・・今日…今日だけがんばるんだっ・・・!

文字列 * 整数

文字列を指定した整数だけ繰り返すことができます。

text = 'Hello'

print(text * 3)

実行結果

HelloHelloHello

*=演算子で演算した結果をそのまま変数に代入できます。

text = 'Hello'
text *= 3

print(text)

実行結果

HelloHelloHello

文字列に値を埋め込む

文字列に変数やデータを埋め込むには、以下の方法があります。

formatメソッドを使う

formatメソッドを使うことで、文字列に値を埋め込むことができます。

使い方

値を埋め込みたい箇所に{数字}を記述し、数字を0から1ずつ増やしていきます。そして、formatメソッドを呼び出し、引数に挿入したい値を記述しましょう。

'{0} {1} {2} ... {N}'.format(値1, 値2, 値3, ... 値N)

数字は省略することも、

'{} {} {}'.format(値1, 値2, 値3)

キーワードで指定することもできます。

'{name} {age} {gender}'.format(name='名前', age='年齢', gender='性別')

サンプル

文字列中に数字とキーワードのどちらも指定されている場合は、formatメソッド内で数字の値から指定して、その後でキーワードの値を指定しましょう。

text = '名前: {0}, 年齢: {age}, 所属: {1}'.format('エレン・イェーガー', '調査兵団', age=15)
print(text)

実行結果

名前: エレン・イェーガー, 年齢: 15, 所属: 調査兵団

フォーマット済み文字列リテラル

この方法が一番楽に値を埋め込むことができるのでオススメです。
※ Python3.6で追加

使い方

文字列リテラルの先頭にfまたはFを記述し、文字列中に{値}を記述するだけで埋め込むことができます。

f'{値1} {値2}'

f"{値1} {値2}"

サンプル

以下のコードでは、文字列リテラルを使って直接値を埋め込んでいますが、その際のクォーテーションには注意してください。

# 変数も埋め込める
age = 15

text = f'名前: {"ミカサ・アッカーマン"}, 年齢: {age}, 所属: {"調査兵団"}'
print(text)

実行結果

名前: ミカサ・アッカーマン, 年齢: 15, 所属: 調査兵団

%記法

%演算子を使ってC言語のprintf関数のように文字列を埋め込むことができます。

書式

以下のように記述します。

'%s %d' % (値1, 値2)

%s%dはフォーマット指定子と呼ばれ、特定の型の値を埋め込むことができます。

フォーマット指定子

%d符号付10進整数
%f10進浮動小数点数
%c文字一文字
%s文字列(str()で変換)

サンプル

以下のように使います。

text = '名前: %s, 年齢: %d, 所属: %s' % ('アルミン・アルレルト', 15, '調査兵団')
print(text)

実行結果

名前: アルミン・アルレルト, 年齢: 15, 所属: 調査兵団

【参考】printf 形式の文字列書式化 

文字列に変換する:str()

str()を使って他の型の値を文字列に変換できます。

書式

str(オブジェクト)

引数にオブジェクトやリテラルを指定することで文字列に変換できます。

サンプル

以下のコードでは、int型の値を文字列に変換して+演算子で連結しています。

year = 199 
text = 'X年、世界は核の炎に包まれた!' 

print(str(year) + text)

実行結果

199X年、世界は核の炎に包まれた!

任意の文字で置換する:replace()

replaceメソッドを使うことで、指定した文字を置換できます。

書式

str.replace(old, new[, count])

文字列中の全てのoldnewで置換した文字列を新たに生成して返します。

オプション引数のcountを指定することで、先頭からいくつ置換するか指定できます。省略した場合は、当てはまる文字すべてを置換します。

サンプル

例えば以下のように置換できます。

text = 'ヤムチャのことか--!!'
replace_text = text.replace('ヤムチャ', 'クリリン')

print(text)
print(replace_text)

実行結果

ヤムチャのことか--!!
クリリンのことか--!!

デフォルトでは、条件に当てはまる全ての文字を置換してしまうので注意しましょう。

text = "いっぱい"

print(text.replace('い', 'お'))

実行結果

おっぱお

任意の文字で分割する:split()

splitメソッドを使うことで、文字列を指定した文字で分割できます。

書式

str.split(sep=None, maxsplit=-1)

sepに指定した文字列で区切ったリストを返します。sepNoneの場合は空白文字で分割します。

maxsplitを指定することで最大分割回数を指定できます。マイナスの値が指定された場合は、分割できる箇所をすべて分割します。

サンプル

以下のコードでは「/」で文字列を分割します。

demon_slayer = '炭治郎/禰豆子/善逸/伊之助'

print(demon_slayer.split('/'))

実行結果

['炭治郎', '禰豆子', '善逸', '伊之助']
【Python】文字列を分割する方法【split関数の使い方】【Python】文字列を分割する方法【split関数の使い方】

任意の文字が文字列に含まれるか:in演算子

in演算子を使うことで、指定した文字が文字列中に含まれているか検索できます。

text = 'アイザック,グレゴリー,マルコ,ミゲル,ウォーリー,マシュー'

print('ウォーリー' in text)

実行結果

True

含まれていればTrue、含まれていなければFalseが返されます。

先頭・末尾の文字が任意の文字と一致するか:startswith()、endswith()

startswithメソッドは先頭が、endswithメソッドは末尾が任意の文字と一致するか判定することができます。

書式

# 先頭
str.startswith(prefix[, start[, end]])

# 末尾
str.endswith(suffix[, start[, end]])

先頭(末尾)の文字がprefix(suffix)と一致するかどうかを判定します。prefix(suffix)にはタプルで複数の文字を指定することもできます。

オプション引数を指定することで、どこから(start)どこまで(end)を検索するかを指定できます。

サンプル

以下の例では、文字列がHTMLの見出しかどうかを判定しています。

midasi1 = '<h2>驚愕!アプリでダイエット!?一ヶ月で30kg落とす方法とは!?</h2>'
text = '<p>ウンタラカンタラ大学で『努力0!』『費用0!』で痩せる方法が発見されたのを知っていますか?</p>'
midasi2 = '<h3>ポイントは食事を取らないこと</h3>'

midasi = ('<h2>', '<h3>')

print(midasi1.startswith(midasi))
print(text.startswith(midasi))
print(midasi2.startswith(midasi))
print()

midasi = ('</h2>', '</h3>')

print(midasi1.endswith(midasi))
print(text.endswith(midasi))
print(midasi2.endswith(midasi))

実行結果

True
False
True

True
False
True

大文字・小文字にする:upper()・lower()

upperメソッドで大文字、lowerメソッドで小文字にすることができます。大文字・小文字が無い文字に使用しても意味はありません。

サンプル

text = 'Umbrella'

print(text.upper())
print(text.lower())

実行結果

UMBRELLA
umbrella

先頭・末尾の文字の削除:lstrip()・rstrip()

lstripメソッドは先頭から、rstripメソッドは末尾から文字を削除できます。

書式

# 先頭から削除
str.lstrip([chars])

# 末尾から削除
str.rstrip([chars])

charsに指定された文字が削除されたコピーを返します。charsには除去される文字の集合を指定します。charsが省略されるかNoneを指定された場合は、空白文字が削除されます。

サンプル

s = 'オレのターン!ドロー!'

print(s.lstrip('オレの'))

# 文字の並びは関係ない
print(s.lstrip('レのオ'))

実行結果

ターン!ドロー!
ターン!ドロー!

空白の削除

引数に何も指定しなければ連続している全ての空白が削除されます。

text = '    ソラシロ:    '
race = 'イマニティ'

# 通常
print(text + race)
# 先頭の空白の削除
print(text.lstrip() + race)
# 末尾の空白の削除
print(text.rstrip() + race)
# 先頭・末尾の空白の削除
print(text.lstrip().rstrip() + race)

実行結果

    ソラシロ:    イマニティ
ソラシロ:    イマニティ
    ソラシロ:イマニティ
ソラシロ:イマニティ

まとめ

この記事では、Pythonの文字列(str型)の使い方を解説しました。

今回のおさらい

  • 文字列 = 『’文字列’ or “文字列”』 
  • 複数行 = 『”’文字列”’ or “””文字列”””』
  • 文字列に変換 = 『str(オブジェクト)』

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ

タイトルとURLをコピーしました