Python 文字列とファイル入出力
このトピックを終えると
Python で文字列を様々に操作し、テキストファイルを読み書きできるようになります。
文字列は文字の配列
Python で文字列 (str) は、文字が順に並んだシーケンスです。リストのようにインデックスとスライスが可能です。
text = "BioPlayground"
print(text[0]) # 'B' — 最初の文字print(text[-1]) # 'd' — 最後の文字print(text[3:7]) # 'Play' — 3 番目から 6 番目までprint(len(text)) # 13文字列は 不変 (immutable) です。text[0] = 'b' はエラーになります。修正するには新しい文字列を作成する必要があります。
よく使う文字列メソッド
msg = " Hello, World! "
msg.strip() # 'Hello, World!' — 両側の空白を削除msg.lower() # ' hello, world! 'msg.upper() # ' HELLO, WORLD! 'msg.replace("World", "Python") # ' Hello, Python! '
# 分割と結合csv = "りんご,バナナ,ぶどう"fruits = csv.split(",") # ['りんご', 'バナナ', 'ぶどう']"-".join(fruits) # 'りんご-バナナ-ぶどう'
# 包含の有無"バナナ" in csv # Truecsv.startswith("りんご") # Truecsv.count(",") # 2split() と join() は、CSV の解析、ログ分析、データの前処理で毎日使われます。
f-string — 変数を文字列に挿入
Python 3.6 から導入された f-string は、文字列の中に変数を直接入れる最もすっきりとした方法です。
name = "キム・フン"score = 95.5
# f-string (推奨)print(f"{name}さんの点数: {score}点")# キム・フンさんの点数: 95.5点
# 数式も可能print(f"合格かどうか: {'合格' if score >= 60 else '不合格'}")# 合格かどうか: 合格
# 小数点フォーマットpi = 3.141592print(f"円周率: {pi:.2f}") # 円周率: 3.14以前の方法 ("% s" % name, "{}".format(name)) も動作しますが、f-string は可読性とパフォーマンスの両方で優れています。
ファイルの読み込み
# ファイル全体を読み込むwith open("data.txt", "r", encoding="utf-8") as f: content = f.read() print(content)
# 一行ずつ読み込む (大きなファイルに有利)with open("data.txt", "r", encoding="utf-8") as f: for line in f: print(line.strip()) # 行末の改行を削除with 文はファイルをオープンし、ブロックが終了すると 自動的に閉じます。f.close() を直接呼び出す必要はありません。with を使用しない場合、ファイルが閉じられず、メモリリークが発生する可能性があるため、常に with を使用します。
ファイルの書き込み
# 新しいファイルを作成 (既存の内容を上書き)with open("output.txt", "w", encoding="utf-8") as f: f.write("最初の行\n") f.write("2 番目の行\n")
# 既存のファイルに追加 (append)with open("output.txt", "a", encoding="utf-8") as f: f.write("追加された行\n")| モード | 意味 | ファイルがない場合 |
|---|---|---|
"r" | 読み取り専用 | エラー |
"w" | 書き込み (上書き) | 新規作成 |
"a" | 追加 (追記) | 新規作成 |
"x" | 作成 (すでに存在する場合はエラー) | 新規作成 |
実践パターン — CSV を直接パース
# CSV ファイルを直接パース (ライブラリなし)with open("scores.csv", "r", encoding="utf-8") as f: header = f.readline().strip().split(",") print(header) # ['名前', '国語', '英語', '数学']
for line in f: fields = line.strip().split(",") name = fields[0] total = sum(int(x) for x in fields[1:]) print(f"{name}: 合計 {total}")もちろん、実務では csv モジュールや pandas を使用しますが、ファイル入出力の原理を理解すれば、どのような形式のデータでも扱えるようになります。
重要なまとめ
文字列とファイルは、プログラミングの 入出力経路 です。外部データを読み込み、処理結果を保存し、人が読める形式で出力するすべてのプロセスがここから始まります。split, join, f-string, with open — この 4 つを習得すれば、ほとんどのテキスト処理が可能になります。