文字列の結合は、文字列の解析やデータ処理などで頻繁に行われる作業の一つですね。
Pythonには、文字列を簡単に結合するための機能が豊富に用意されています。
しかし、実際に文字列を結合しようとすると、次のような課題に直面することも…。
- 複数の文字列を簡単に結合する方法は?
- リスト化された文字列を一括で結合する方法はある?
- テキストに文字列を埋め込みたい!
この記事では、Pythonの文字列結合について図解付きでわかりやすく解説していきます。
文字列結合方法まとめ
Pythonにおける文字列の結合には主に次のような種類があります。
- シンプルに複数の文字列を連結する
[リスト]
内の文字列を結合する- 既存テキスト内に文字列を埋め込む
これらの結合方法を以下の表にまとめているので、一覧を確認してみましょう。
分類 | 結合方法 | 実行例, 適用 |
---|---|---|
"文字列" の連結 |
連結"文字列1"+"文字列2" |
"あいう"+"えお" → "あいうえお" |
連結→代入"変数1" += "変数2" |
s1="かきく" , s2="けこ" s1+=s2 → s1="かきくけこ" |
|
繰り返し"文字列" * 繰り返し回数 |
"あい"*3 → "あいあいあい" |
|
[文字列リスト] の結合 |
"結合文字".join([リスト]) |
l=["さ", "し", "す", "せ", "そ"] "_".join(l) → "さ_し_す_せ_そ" |
テキストに埋め込み | f-string で埋め込み※Python3.6以降 |
name="田中" , f"{name}さん" → "田中さん" |
.format() で埋め込み※Python2.6以降 |
name="田中" , "{}さん".format(name) → "田中さん" |
|
%演算子 で埋め込み※Python3.0以降は非推奨 |
name="田中" , "%sさん" % name → "田中さん" |
文字列の結合は、テキスト処理の基本操作の一つです。
例を挙げればキリがありませんが、例えば次のような処理でも使用します。
- テキスト処理
- ファイルパスの結合
- ウェブスクレイピング結果の整理
- 各種クエリの結合など
以下では、各文字列の結合方法について、サンプルコード付きで詳しく解説していきます。
しっかり結合方法を覚えて、適切に処理できるようになりましょう!
+で文字列を連結
最も基本的な文字列の結合方法は、2つ以上の文字列を+
で繋ぐ方法です。
"文字列1"+"文字列2"
結合するのは、文字列のシリアル、文字列の変数どちらでもOKです。
# 文字列のシリアル値を結合
"あいう" + "えお"
# 'あいうえお'
# 文字列の変数を結合
s1 = "かき"
s2 = "く"
s3 = "けこ"
s1 + s2 + s3
# 'かきくけこ'
文字列の連結は非常にシンプルで簡単ですね。
この他の処理方法についても、しっかりおさえて行きましょう。
文字列に数値を連結
+
で連結できるのは、文字列同士のみです。
文字列と数値を+
で結合しようとすると、次のようなエラーが発生します。
name = "田中"
age = 20
name + "さんは、"+ age +"歳です。"
# TypeError: can only concatenate str (not "int") to str
文字列と数値を連結したい場合には、str()
で数値を文字列に変換します。
"文字列" + str(数値)
サンプルコードで挙動を確認してみます。
name = "田中"
age = 20
name + "さんは、"+ str(age) +"歳です。"
# '田中さんは、20歳です。'
問題なく、文字列と数値を結合することができましたね。
ここでは、+
で結合する方法を紹介しましたが、文字列と数値を結合する際は、後述するf-string
で埋め込みも便利です。
+=で文字列を連結(代入)
+
で結合する際の、ちょっとしたテクニックとして、+=
での結合があります。
左側の変数に右側の変数を結合して、左側の変数に代入することができます。
s1 += s2
s1
にs1+s2
の値を代入
サンプルコードで実行例を確認してみましょう。
s1 = "あいう"
s2 = "えお"
s1+=s2
s1
"あいうえお"
文字列の繰り返し
同じ文字列を複数回繰り返す場合は、対象文字列に繰り返し回数をかけます。
"文字列" * 繰り返し回数
"あい" * 3
# 'あいあいあい'
s = "すももも"
s * 3
# 'すもももすもももすももも'
テキスト処理の際には、文字列を繰り返すこともあるので、覚えておきたい内容ですね。
[文字列リスト]の結合|.join()
.join()
メソッドを使用すると、[文字列のリスト]
の要素を指定の文字列で結合できます。
"結合文字".join([文字列のリスト])
.join()
を実行すると[文字列のリスト]
を結合文字
で結合した文字列が返されます。
サンプルコードで挙動を確認してみましょう。
s = ["さ", "し", "す", "せ", "そ"]
# "_"で結合
"_".join(s)
'さ_し_す_せ_そ'
# " "で結合
" ".join(s)
'さ し す せ そ'
# "-"で結合
"-".join(s)
'さ-し-す-せ-そ'
.join()
メソッドでは、[リスト]
だけでなく、(タプル)
や{セット}
などのシーケンスに適用できます。
# 文字列のタプルの結合例
s = ("さ", "し", "す", "せ", "そ")
"-".join(s)
'さ-し-す-せ-そ'
# 文字列のセットの結合例
s = {"さ", "し", "す", "さ", "し"}
# {'さ', 'し', 'す'}
"-".join(s)
# 'し-す-さ'
- 【参考】逆の操作である文字列の分割については、以下の記事で解説しています。
数値のリストを結合
.join()
は、[文字列のリスト等]
を結合するメソッドです。
[数値のリスト]
は、そのままでは結合できません。
date = [1998, 10, 31]
"-".join(date)
# TypeError: sequence item 0: expected str instance, int found
[数値のリスト]
は、リスト内包表記で数値を文字列に変換してから、.join()
を適用しましょう。
date = [1998, 10, 31]
date_str = [str(n) for n in date] # リスト内包表記で文字列に変換
"-".join(date_str)
# '1998-10-31'
# 一行で書く場合
date_str = [str(n) for n in date]
"-".join([str(n) for n in date])
# '1998-10-31'
- 【参考】文字列の日付を
pandas
のDatetime
に変換する方法は以下の記事で紹介しています。
テキストに文字列を埋め込み
文字列の結合の特別なパターンとして、テキストに文字列を埋め込む方法を紹介します。
- 例)
"私は___です。"
という雛形に、name="田中"
を埋め込んで、"私は田中です。"
というテキストを作成
Pythonでテキストに文字列を埋め込む方法は以下の通りです。
構文・メソッド | 使用方法 |
---|---|
f-string |
文字列の前にf をつけて、文字列の中に{変数 or 式} を記述※Python3.6以降で使用可能 |
.format() |
文字列中で{} を用意し、.format() で変数や式を与える※Python2.6以降で使用可能 |
% 演算子 |
文字列中でフォーマット指定子を用意し、%演算子 の右側に変数を与える※Python3.0以降で非推奨 |
バージョンの制限がない限りは、基本的にはf-string
を使用することをおすすめします。
変数や式を直接記述できるうえに、可読性も高く、最も使いやすいです。
f-stringで埋め込み
f-string
は、Python3.6から導入された文字列フォーマットで、文字列中に変数や式の値を埋め込むことができます。
文字列の前にf
をつけて、文字列の中に{変数 or 式}
を記述します。
f"文字列の中に{リテラル, 変数, or式}を記述"
サンプルコードで使用方法を確認してみましょう。
name = "田中"
age = 20
f"{name}さんは、{age}歳です。"
# '田中さんは、20歳です。'
f-string
の中で式を使うことも可能です。
f"{name}さんは、{age*3+5}歳です。"
# '田中さんは、65歳です。'
.format()で埋め込み
".format()"
は、文字列をフォーマットするためのメソッドです。
文字列の中にプレースフォルダー{}
を用意して、.format()
メソッドで値を代入します。
"文字列の中に{}を記述".format(リテラル, 変数, or式)
サンプルコードで使用方法を確認してみましょう。
name = "田中"
age = 20
"{}さんは、{}歳です。".format(name, age)
# '田中さんは、20歳です。'
%演算子で埋め込み
%演算子
は、C言語のprintf()
関数のフォーマット指定子に似た方法です。
文字列の中に、変数の型に応じたフォーマット指定子を準備して、%( )
で値を代入します。
主なフォーマット指定子は次の通りです。
フォーマット指定子 | 説明 |
---|---|
%s |
文字列 |
%d |
整数 |
%f |
浮動小数点 |
%e |
指数表記の浮動小数点 |
サンプルコードで使用方法を確認してみましょう。
name = "田中"
age = 20
"%sさんは、%d歳です。" %(name, age)
# '田中さんは、20歳です。'
ただし、Python3.0以降で非推奨です。
f-string
やformat()
というより便利な手法もあるので、よっぽどの事情がない場合は使うことはないと思います。
オススメ|データ分析の勉強方法
今回はPythonでテキストファイルを分割する方法ついて解説しました。
データ分析初心者の方にはこちらの記事もおススメです。
Pythonで作業の効率化を目指している方には、次の記事がおススメです。