【Python】文字列を扱ってみよう!

Pythonロゴ

Pythonには変数として「数値」「文字列」「配列」「辞書」など複数のタイプがあります。 こちらの記事では「文字列」についてまとめてみました。

文字列の入力

Pythonの文字列はシングルクォート(') または ダブルクォート(") で囲った値を文字列として処理されます。

文字列 (1行)

str1 = 'ABCDEFG'
 # or
str1 = "ABCDEFG"

print(str1)
print(type(str1))
ABCDEFG
<class ’str'>

文字列 (複数行)

str2 = '''ABCD
EFGH'''
 # or
str2 = """ABCD
EFGH"""

print(str2)
print(type(str2))
ABCD
EFGH
<class ’str'>

複数行記載をする場合に、ソースをきれいに見せるために最初に一行改行を入れたくなる場合がります。
この場合出力結果にも改行が入るため注意が必要になります。
どうしても改行を入れたい場合は「バックスラッシュ(\)」を入れることで対処することが可能です。

str3 = """ # 最初に改行が入っている
ABCD
EFGH       # 最後に改行が入っている
"""
print(str3)
        <= 出力結果に改行が入る
ABCD
EFGH
        <= 出力結果に改行が入る
<class ’str'>

バックスラッシュ(\)を入れて対応した場合

str4 = """\
ABCD
EFGH\
"""
print(str4)
ABCD # 改行がなくなる
EFGH
<class ’str'>

文字列の簡単な処理

文字結合

文字列を並べるまたはプラス記号(+)を付けて結合する事ができます。
可読性を考えるとプラス記号を付けるのが良いと考えます。

print("Python" "3")
# or
print("Python" + "3")

# 結果 Python3

Pythonは変数の型によりプラス記号の意味が変わります。
そのため文字列と数値型を結合するとエラーが発生します。
数字を結合する場合は、文字列にキャストをするか文字列の3を使う必要があります。

print("Python" + 3)  # 3が数値型

# 結果
# Traceback (most recent call last):
#  File "/opt/project/blog_test.py", line 1, in <module>
#    print("Python" + 3)
# TypeError: can only concatenate str (not "int") to str

文字列を繰り返し

決まった文字を繰り返す場合はアスタリスク(*) 回数と入力する事で対応ができます。

print("Python." * 2)

# 結果 Python.Python.

指定された範囲の文字取得

文字列の中で決まった文字を取得する事ができます。

n番目の文字取得 (開始は0番からになります)

str5 = "ABCDEFG"
print(str5[1])  # n番目の文字取得

# 結果 B
str6 = "ABCDEFG"
print(str6[-1])  #マイナスの場合は後ろから取得

# 結果 G

m番からn番まで指定範囲の文字取得

str7 = "ABCDEFG"
print(str7[1:4])  # m番からn番まで指定範囲の文字取得

# 結果 BCD

0番からn番目まで指定範囲の文字取得

str8 = "ABCDEFG"
print(str8[:4])  # 0番からn番目まで指定範囲の文字取得

# 結果 ABCD

n番から最後まで指定範囲の文字取得

str9 = "ABCDEFG"
print(str9[4:])  # n番から最後まで指定範囲の文字取得

# 結果 EFG

範囲を超える文字を取得するとエラーになります。

str10 = "ABCDEFG"
print(str10[7])

# 結果 
# Traceback (most recent call last):
#  File "/opt/project/blog_test.py", line 5, in <module>
#    print(tmp[7])
# IndexError: string index out of range

文字代入

先ほど文字結合で変数と文字列を組み合わせる方法がありましたが別で「代入」する方法があります。

formatを使って代入

str11 = "ABC{}GHI"
print(str11.format("DEF"))

# 結果 ABCDEFGHI

複数代入する事も可能

str12 = "AB{}EF{}IJ"
print(str12.format("CD", "GH"))

# 結果 ABCDEFGHIJ

代入の順番を決めることも可能

str13 = "AB{0}EF{1}IJ"
print(str13.format("CD", "GH"))
# 結果 ABCDEFGHIJ

str14 = "AB{1}EF{0}IJ"
print(str14.format("CD", "GH"))
# 結果 ABGHEFCDIJ

代入にキー名を設定する事も可能

str15 = "AB{txt1}EF{txt2}IJ"
print(str15.format(txt1="CD", txt2="GH"))

# 結果 ABCDEFGHIJ

f-stringsを使って代入

Python3.6から新しくf-stringsという仕組みが導入されています。
代入したい文字列の囲み文字の前に「f」と入れることで利用できます。

str16a = "CD"
str16b = "GH"
print(f"AB{str16a}EF{str16b}IJ")

# 結果 ABCDEFGHIJ

%演算子を使って代入

古い方法になりますが「%演算子」を使って代入することもできます。
文字列の場合は「%s」数字の場合は「%d」を入れることで利用できます。

str17 = "CD"
print("AB%sEF" % (str17))

# 結果 ABCDEF

まとめ

文字列に関して基本的な部分を再確認いたしました。
次回は配列に関して確認いたします。

サンプルプログラム

こちらの記事で作成したプログラムはGitHub環境にアップしております。
下記からダウンロードいただけます。

参考 str.py スクリプトGitHub python-beginner Pythonロゴ【Python】リスト型(配列)を扱ってみよう!Pythonロゴ【Python】数値を扱ってみよう!