Pythonの基礎知識(基礎編)

【Pythonの基礎知識】Pythonのファイル操作を完全理解

プログラムが実用的になるのは「外部データを読み書きできる」ようになってからです。Pythonのopen、read、writeを中心に、最低限押さえておくべきファイル操作の基本を解説します。

ファイル操作とは?Pythonにおける基本の役割

ファイル入出力は、プログラムと外部世界の橋渡しです。Pythonではシンプルな構文で読み書きが可能です。

open関数とファイルモードの種類

ファイルを開く際には、open関数とモード指定が必要です。読み込み・書き込み・追記など、操作の目的に応じて使い分けます。

file = open("sample.txt", "r")
data = file.read()
file.close()

モード意味
"r"読み込み(ファイルが無いとエラー)
"w"書き込み(内容を上書き)
"a"追記(末尾に追加)
"rb" / "wb"バイナリファイル操作

ファイルの読み取り(read/readlinesの違い)

テキストファイルの読み込みにはreadとreadlinesが使われます。それぞれの違いを理解して、適切に使い分けましょう。

# 全文読み込み
with open("sample.txt", "r") as f:
    content = f.read()

# 行単位で読み込み
with open("sample.txt", "r") as f:
    lines = f.readlines()

書き込み・追記(write/writelinesの使い分け)

ファイルへの書き込みではwrite(1行ずつ)とwritelines(複数行まとめて)を目的に応じて選びます。

# 一行書き込み
with open("output.txt", "w") as f:
    f.write("こんにちは!\n")

# 複数行まとめて書き込み
lines = ["1行目\n", "2行目\n"]
with open("output.txt", "w") as f:
    f.writelines(lines)

ファイル操作における注意点とベストプラクティス

ファイル読み書きはシンプルに見えて、ミスが多発する領域です。初心者が見逃しやすい落とし穴と、Python的な安全設計の実践ポイントを整理します。

with構文で「閉じ忘れ」を防ぐのが基本

ファイルは開いたら必ず閉じる必要があります。 open()を使った後に close()を忘れると、ファイルがロックされたままになるなどの不具合を引き起こします。

f = open("data.txt", "r")
content = f.read()
# f.close() ← 書き忘れるとメモリリークやロックの原因に

これを避けるために、Pythonでは with構文が推奨されています。

with open("data.txt", "r") as f:
    content = f.read()
# ブロックを抜けると自動でcloseされる

エンコーディングと文字化けの対策

日本語ファイルを扱うときは、必ず encoding="utf-8"を明示しましょう。デフォルトでは環境依存で文字化けすることがあります。

with open("日本語.txt", "r", encoding="utf-8") as f:
    text = f.read()

ファイルが存在しない場合の対処(try-except)

存在しないファイルを開こうとすると FileNotFoundErrorが発生します。 try-exceptで事前に対策を入れておくのが基本です。

try:
    with open("not_exist.txt", "r") as f:
        data = f.read()
except FileNotFoundError:
    print("ファイルが見つかりませんでした。")

実例で学ぶ:ログファイルの読み書き

単なる構文理解で終わらせず、実務に活かせる「使いどころ」を知ることが重要です。ここでは、ログファイルを扱うシンプルな例を通じてファイル操作を体験的に学びます。

ファイルにログを書き出す

ログとは、システムの状態や処理結果をテキストとして記録しておくものです。以下は、ログを追記する処理です。

with open("log.txt", "a", encoding="utf-8") as f:
    f.write("処理開始: 2025-04-09 10:00\n")
    f.write("完了: データ取得成功\n")

モード "a"を使えば既存ファイルの末尾に追記できます。日付やステータスを都度記録する用途でよく使われます。

ログファイルを解析する読み込み処理

記録したログはあとで解析に使えます。行ごとに読み込んで処理を分岐させるのが典型です。

with open("log.txt", "r", encoding="utf-8") as f:
    for line in f:
        if "エラー" in line:
            print("エラー検出:", line.strip())

処理結果に応じて条件分岐できるように書くことで、ログは単なる記録から「監視ツール」に進化します。

複数ファイルの操作・パス指定の注意点

ログファイルが複数に分かれるケースでは、ループ処理でファイルを順に開くことになります。OSや環境に依存しないパス指定が大切です。

import os
log_dir = "logs"
for name in ["2024-01.txt", "2024-02.txt"]:
    path = os.path.join(log_dir, name)
    with open(path, "r", encoding="utf-8") as f:
        print(f.read())

os.path.join()を使えば、WindowsでもmacOSでも動作する汎用コードになります。

ファイル読み書きの応用テクニック

ここでは基本構文を踏まえた上で、実務で役立つ読み書き処理の工夫を紹介します。

行ごとの処理とフィルタリングの実装例

テキストファイルの内容を一行ずつ処理することで、ログ解析やデータの整形が可能になります。特定条件に合致する行だけを抜き出す処理は、システム運用でも頻出です。

with open("log.txt", "r", encoding="utf-8") as file:
    for line in file:
        if "ERROR" in line:
            print(line.strip())

CSVファイルの読み書きと扱いの注意点

CSVは構造化されたデータ保存に適しており、Pythonの標準ライブラリである csvモジュールを使うと簡単に操作できます。ただし、改行コードや区切り文字に注意が必要です。

比較項目csv.readercsv.writer
処理目的CSVを読み取るCSVに書き込む
openのモード"r""w"(+newline="")
使用関数csv.readercsv.writer
使用例forでループwriterowで出力

csv.reader(読み取り処理)

import csv
with open("data.csv", "r", encoding="utf-8") as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

CSVファイルを読み込む場合は、"r"モードで開き、csv.readerで1行ずつ取得してループ処理します。

csv.writer(書き込み処理)

CSVファイルへ書き出す場合は、"w"モードとnewline=""を指定して空行を防止し、writerow()で行データを出力します。

with open("output.csv", "w", encoding="utf-8", newline="") as f:
    writer = csv.writer(f)
    writer.writerow(["name", "age"])
    writer.writerow(["Alice", 30])

日本語ファイルを扱う際のエンコーディング指定

日本語を含むファイルを扱う場合、エンコーディング指定を省略すると文字化けの原因になります。Windowsでは「cp932」、Mac/Linuxでは「utf-8」が一般的です。

特にCSVやログファイルを扱う場面では、エンコーディングを明示的に指定しましょう。

with open("japanese.txt", "r", encoding="utf-8") as f:
    data = f.read()
    print(data)

処理結果をログとして保存する

ログ出力はファイル操作の王道用途です。printでは得られない可視性と保守性を得られます。

ログファイルへの追記と日付付き保存

ログは通常、ファイルに追記(append)モードで保存します。日付をファイル名に含めておくことで、時系列でのログ管理が容易になります。

from datetime import datetime
log_filename = f"log_{datetime.now().strftime('%Y%m%d')}.txt"

with open(log_filename, "a", encoding="utf-8") as logfile:
    logfile.write("処理を開始しました\n")

ログローテーションの基本設計(簡易版)

ログファイルが肥大化すると保守性が下がります。一定期間ごとに別ファイルへ分割する「ログローテーション」も基本設計に含めましょう。

import os
from datetime import datetime

log_dir = "logs"
os.makedirs(log_dir, exist_ok=True)
log_path = os.path.join(log_dir, f"log_{datetime.now().strftime('%Y%m%d')}.txt")

with open(log_path, "a", encoding="utf-8") as logfile:
    logfile.write("定期ログを書き込みました\n")

バイナリモードとテキストモードの違い

画像やPDFなどの非テキストファイルを扱う場合は、通常のread/writeでは対応できません。モード指定の違いを理解しましょう。

rb/wbモードでの読み書き例

テキストファイルは通常「r」「w」「a」などのモードで開きますが、バイナリファイルの場合はそれぞれに「b」を付けた「rb」「wb」「ab」などを使います。

# バイナリで画像を読み込んで別名で保存
with open("sample.jpg", "rb") as infile:
    data = infile.read()

with open("copy.jpg", "wb") as outfile:
    outfile.write(data)

実務でありがちな落とし穴と解決法

バイナリモードで開くのを忘れてJPEGやPDFを処理しようとすると、文字コードエラーが発生することがあります。また、ファイルの内容が破損する原因にもなります。

非テキストファイルを扱う場合は「rb」「wb」などのバイナリモードを明示し、処理前にファイルの種別を把握しておくことが重要です。

ファイルとディレクトリの存在チェック

実際の業務では「ファイルが存在する前提」が破られることもあります。安全な設計には事前のチェックが欠かせません。

os.pathとPathlibでの存在判定

Pythonには、標準ライブラリとしてファイルやディレクトリの存在を確認するための仕組みが用意されています。主に使われるのは os.pathpathlibモジュールです。

import os
if os.path.exists("sample.txt"):
    print("ファイルは存在します")
else:
    print("ファイルが見つかりません")

from pathlib import Path
file = Path("sample.txt")
if file.exists():
    print("ファイルは存在します")
else:
    print("ファイルが見つかりません")

フォルダ作成・削除を伴う操作の基本

存在チェックと組み合わせて、フォルダの作成や削除を行うことも重要です。エラーを避けるためには「既に存在しているかどうか」の事前判定が欠かせません。

import os
folder = "output"
if not os.path.exists(folder):
    os.mkdir(folder)

from pathlib import Path
path = Path("output")
path.mkdir(exist_ok=True)

まとめ|ファイル操作は実務の第一歩

ファイル操作は、Pythonが現実世界と接続するための基本機能です。ログ出力や設定ファイル、データ永続化など、あらゆる実務に関わります。

open・read・writeといった基本操作を習得することで、単なる学習コードから実用的なツールへと進化できます。

次回は、コードの再利用性や拡張性を高める「モジュールとライブラリの使い方」へ進みます。

この記事を読んだら、次は「【Pythonの基礎知識】モジュールとライブラリを使う方法」の使い方に進むのがおすすめです。

よく読まれている記事

1

IT入門シリーズ 🟢 STEP 1: ITの基礎を知る(ITとは何か?) 📌 IT初心者が最初に学ぶべき基本知識。ITの概念、ネットワーク、OS、クラウドの仕組みを学ぶ ...

2

「私たちが日々利用しているスマートフォンやインターネット、そしてスーパーコンピュータやクラウドサービス――これらの多くがLinuxの力で動いていることをご存じですか?無料で使えるだけでなく、高い柔軟性 ...

3

この記事は、Linuxについて勉強している初心者の方向けに「Shellスクリプト」について解説します。最後まで読んで頂けましたら、Shellスクリプトはどのような役割を担っているのか?を理解出来るよう ...

-Pythonの基礎知識(基礎編)