文字列操作をマスターして業務を自動化しよう!
化学研究者がPythonを活用する上で、とくに業務自動化のために「文字列操作」は重要です。
ファイル名管理、データ整形、ユーザー入力処理などの場面で、文字列を自在に扱える力が求められます
本記事では、文字列型(str型)の基本から、実際のケースを例にした応用的なテクニックまで解説します。
数値計算と違って、文字列操作をいつ使うのかがイメージしにくい方も多いと思いますので、文字列操作がどんな場面で使われるのかを具体的に示しながら解説していきます。
この記事を読むことで、Pythonの文字列操作に必要な知識を手に入れましょう!
基礎文法の全体像については以下の記事を参照ください。
研究者のPython活用で必要な8つのポイント はじめに 「プログラミングって難しそう…?」 そう思っている化学者研究者の皆さん、ちょっと待ってください! 化学者研究者がPythonを使いこなすために押さえておくべきポイントは8[…]
文字列操作の基本
文字列:str型
文字列は「str型」と呼ばれる型です。
文字を意味する”string”という英単語が元です。
文字列は以下コードのようにシングルクオーテーションやダブルクォーテーションで囲うことで定義できます。
a = '文字列です'
print(a)
# 「文字列です」と出力
b = "125"
print(b)
# 125と出力されるが、これはstr型
文字列の連結
複数の文字列を「+演算子」で連結できます。
これは、自動処理で必要な場面が多いファイルパスやURLの作成でよく使われます。
以下サンプルコードです。
ファイルをPythonで開いたり、編集したりするのに、ファイルパス(=ファイルの住所)が必要です。
ファイルが保存されているディレクトリ(=フォルダ)のパスとファイル名を定義して、それらを連結してファイルパスを生成しています。
# ファイル保存先パスとファイル名を定義
directory = "C:/Users/chemipy/OneDrive/ドキュメント"
file_name = "20250505_dataA.csv"
# ファイルパスを生成(Windows環境を想定)
file_path = directory + "/" + file_name
print(file_path)
# 出力: C:/Users/chemipy/OneDrive/ドキュメント/20250505_dataA.csv
型変換
数字は文字列型と数値型の変換が可能です。もちろん数字以外は数値型への変換は出来ません。
型変換はどんな時に使うのでしょうか?
汎用的なプログラムを作るために、ユーザーに入力を求めて、その入力を元に処理を行っていくケースがあります。
ユーザーに入力を求めるにはinput()関数を用います。
input()関数で入力されたデータは必ずstr型になります。
もし、ユーザーに数値入力を求めたとしてもstr型になるので、数値演算するには数値型への変換が必要です。
以下サンプルコードです。
このコードを実行すると、まずユーザーからの入力を得るためにプログラムが一時停止します。
ユーザーが数値を入力してEnterを押すと、それ以降のコードが走ります。
ここでは、int()関数で文字列型⇒数値型の変換を行ってモル濃度を計算しています。
# input()関数で入力を求める
conc = input("濃度を入力してください。(g/L)")
# 入力された濃度からmol/Lを求める
molecular_weight = 100 # 分子量の設定
mol_conc = int(conc) / 100 # int()で数値型への変換
print(mol_conc) # 結果出力
逆に、数値型⇒文字列型の変換にはstr()関数を用います。
num = 1000 # 数値型
str_num = str(num) # 文字列型に変換
print(type(str_num))
# <class 'str'>と出力され、文字列型に変換されたことを確認
文字列の抽出
スライス
文字列には先頭が0から始まるインデックスと呼ばれる住所が割り振られています。
0から始まるので注意してください。
このインデックスを指定することで任意の場所の文字列を抽出することができます。
指定の範囲で抽出することをスライスと呼びます。
これは、ファイル名から日付やサンプル名を取り出すときなどによく使われます。
一定のルールでファイル名を設定しておけば、簡単に抽出することができます。
以下サンプルコードです。
文字列[ 開始インデックス : 終了インデックス+1 ] で任意の場所を抽出できます。
日付の場合、開始インデックスが3(先頭が0始まりに注意!)、終了位置(7)のインデックスが10なので、[3:11]となります。
「終了インデックス+1」となっていることがポイントです。
filename = "UV_20250427_sampleA.csv"
# 日付部分だけ取り出す
date = filename[3:11]
print(date)
# 出力: 20250427
# サンプル名だけ取り出す
sample = filename[12:19]
print(sample)
# 出力: sampleA
抽出したい文字列のインデックスが不変(例えばファイル名の命名規則が完璧に守られている)の場合、スライスは簡便かつ有効な手段です。
しかし、インデックスが変わりうるときは「正規表現」という技術を用いると、より柔軟で汎用性の高い抽出が可能です。
正規表現については別記事でまとめる予定です。
データの整形
文字列に対して何らかの処理(すべて大文字にしたい、特定の文字を消したいなど)を行いたい時、「メソッド」というものを使います。
上図のように、文字列の後にドットをつけて、メソッドと引数を指定することで様々な処理ができます。
メソッドは「関数」と混同されがちですが、これらの違いを理解しておくことは重要なので、別記事で解説予定です。
メソッドを使うと文字列データを都合のいい形に整形できます。
文字列に対するメソッドは数多く存在しますが、その中でも使用頻度の高いものを厳選して解説します。
文字列置換
複数のファイルに対して同様の処理を繰り返し行いたい場合、ファイル名の書式が統一されていなければならないケースがあります。
チームで研究していると、たまに統一書式から外れたファイル名で保存されいることがよくありますよね。
そんなときは、文字列置換を使って書式を統一できます。
以下サンプルコードです。
文字列置換はreplace(置き換え対象、置き換え後)で実施します。
サンプルコードでは、まず余計なスペースを消して、ハイフンをアンダーバーに変換しています。
# 元のファイル名(統一書式から外れたもの)
filename = " 250505 -Trial-1.csv"
# 整形処理1:スペースを除去
del_space = filename.replace(" ", "")
print(del_space) # スペースが消えた「250505-Trial-1.csv」が出力
# 整形処理2:"-" を "_" に変換
finalname = del_space.replace("-", "_")
print(finalname)
# ハイフンが変換された「250505_Trial_1.csv」
文字列分割
測定装置やシミュレーションソフトが出力するテキストデータは、カンマやタブ区切りの形式が多く使われます。
その生データから数値データを抽出する際、パース(分割)が必要になります。
以下サンプルコードです。
数値がカンマで区切られた文字列に対して、splitメソッドにキーであるカンマを渡して分割しています。
すると、区切られたデータがリスト(コンテナ型)として生成されます。
しかし、このままでは各数値は文字列型になっているので、数値型への変換を最後に行っています。
# 測定装置の出力例(1行)
raw_line = "0.25,1.23,0.98"
# カンマで区切ってリスト化
values = raw_line.split(",")
print(values) # 出力:['0.25', '1.23', '0.98']
# 各値を float に変換
numbers = [float(v) for v in values]
print(numbers)
# 出力: [0.25, 1.23, 0.98]
型変換の際、「内包表記」というテクニックを用いています。
こちらの詳説は別記事でまとめる予定です。
簡便な文字列の記述方法
最後に、print関数でよく用いるf-stringというテクニックについて解説します。
これまでの文字列操作とは違い、よりスマートにコードを記述する方法に関するものです。
f-string
プログラミングでは、ほとんどのデータを変数に代入して扱います。
そのため、変数の中身をprint関数で出力する際、どんな変数を出力しているかの説明があったほうが分かりやすいです。
その時に用いるのが「f-string」という記述方法です。
百聞は一見に如かず。早速サンプルコードを見ていきましょう。
変数と文字列を合体させて記述するには前項の「文字列の連結」が一つの方法です。
しかし、これはサンプルコードの通り、冗長で可読性が悪いので、f-stringを使用しましょう。
# 変数を定義
conc = 1000
mol_conc = 100
# 文字列の連結を用いたコード
print("濃度(g/L): " + str(conc) + ", モル濃度(mol/L): " + str(mol_conc))
# f-stringを用いた記述
print(f'濃度(g/L): {conc}, モル濃度(mol/L): {mol_conc}')
# いずれも「濃度(g/L): 1000, モル濃度(mol/L): 100」と出力
f-stringの書き方は、「f’文字列{変数}’」となります。
{}カッコの中に変数名を入力すると、その変数値が文字列中に挿入されます。
おわりに
本記事では、実際の使用ケース(ファイル操作、ユーザー入力処理、データ整形)をもとに、Pythonの文字列操作の基本を解説しました。
文字列処理は地味ですが、日常業務をPythonで効率化する要でもあります。
ぜひ実際の仕事の中で、今回紹介したテクニックを活用してみてください!