my.code(); Logomy.code();
Python-6.ファイルの入出力とコンテキストマネージャ

my.code(); Logomy.code();

  • C++
    • 0.C++の世界へようこそ
    • 1.型システムと制御構造
    • 2.データ集合とモダンな操作
    • 3.ポインタとメモリ管理
    • 4.関数と参照渡し
    • 5.プロジェクトの分割とビルド
    • 6.クラスの基礎
    • 7.クラスを使いこなす
    • 8.継承とポリモーフィズム
    • 9.テンプレート
    • 10.STL ①:コンテナ
    • 11.STL ②:アルゴリズムとラムダ式
    • 12.RAIIとスマートポインタ
  • JavaScript
    • 0.JavaScriptへようこそ
    • 1.基本構文とデータ型
    • 2.制御構文
    • 3.関数とクロージャ
    • 4.'this'の正体
    • 5.オブジェクトとプロトタイプ
    • 6.クラス構文
    • 7.配列とイテレーション
    • 8.非同期処理①: Promise
    • 9.非同期処理②: Async/Await
  • Python
    • 0.環境構築と基本思想
    • 1.基本構文とデータ型
    • 2.リスト、タプル、辞書、セット
    • 3.制御構文と関数
    • 4.モジュールとパッケージ
    • 5.オブジェクト指向プログラミング
    • 6.ファイルの入出力とコンテキストマネージャ
    • 7.例外処理
    • 8.ジェネレータとデコレータ
  • Ruby
    • 0.rubyの世界へようこそ
    • 1.基本構文とデータ型
    • 2.制御構造とメソッド定義
    • 3.すべてがオブジェクト
    • 4.コレクション (Array, Hash, Range)
    • 5.ブロックとイテレータ
    • 6.クラスとオブジェクト
    • 7.モジュールとMix-in
    • 8.Proc, Lambda, クロージャ
    • 9.標準ライブラリの活用
    • 10.テスト文化入門
    • 11.メタプログラミング入門
  • Rust
    • 0.Rustの世界へようこそ
    • 1.基本構文と「不変性」
    • 2.関数と制御フロー
    • 3.所有権
    • 4.借用とスライス
    • 5.構造体とメソッド構文
    • 6.列挙型とパターンマッチ
    • 7.モジュールシステムとパッケージ管理
    • 8.コレクションと文字列
    • 9.エラーハンドリング
    • 10.ジェネリクスとトレイト
    • 11.ライフタイム
  • TypeScript
    • 0.TypeScriptへようこそ
    • 1.基本的な型と型推論
    • 2.オブジェクト、インターフェース、型エイリアス
    • 3.関数の型定義
    • 4.型を組み合わせる
    • 5.ジェネリクス
    • 6.クラスとアクセス修飾子
    • 7.非同期処理とユーティリティ型
my.code(); Logomy.code();

環境構築不要、その場で実践。

ut-code / my-code

Copyright © 2026 ut.code();

my.code(); について
コード実行環境についてAI質問機能についてライセンスお問い合わせ
ut.code(); について
公式ウェブサイト公式 𝕏 アカウント

第6章: ファイルの入出力とコンテキストマネージャ

この章では、テキストファイルやJSON、CSVファイルの読み書きといった、実践的なファイル操作を学びます。特に、リソース管理を安全かつ簡潔に行うための with 文(コンテキストマネージャ)は、Pythonプログラミングにおいて必須の知識です。

open()関数によるファイルのオープン

Pythonでファイルを操作するには、まず組み込み関数の open() を使ってファイルオブジェクトを取得します。open() は少なくとも2つの引数、ファイルパスとモードを取ります。

  • ファイルパス: 操作したいファイルへのパス(例: 'data.txt')。
  • モード: ファイルをどのように開くかを指定する文字列。
    • 'r': 読み込み専用(デフォルト)
    • 'w': 書き込み専用(ファイルが存在すれば上書き)
    • 'a': 追記(ファイルの末尾に書き足す)
    • 'x': 新規作成して書き込み(ファイルが存在するとエラー)
    • '+' を付けると読み書き両用になります(例: 'r+', 'w+')。
    • 'b' を付けるとバイナリモードになります(例: 'rb', 'wb')。
Python 実行環境
ブラウザ上で動作するPython3.13.2のREPL実行環境です。
プロンプト (>>>) の後にコマンドを入力し、Enterキーで実行します。
Ctrl+Cまたは左上の停止ボタンで実行中のコマンドを中断できます。
>>> # 'w' モードでファイルを開く(または新規作成する)
>>> f = open('spam.txt', 'w', encoding='utf-8')
>>> f
<_io.TextIOWrapper name='spam.txt' mode='w' encoding='utf-8'>
>>> # ファイルを使い終わったら必ず閉じる
>>> f.close()

encoding='utf-8' は、特に日本語のような非ASCII文字を扱う際に重要です。文字化けを防ぐため、テキストファイルを扱う際はエンコーディングを明示的に指定することを強く推奨します。ファイルを閉じる close() メソッドを呼び出すまで、ファイルリソースはプログラムによって確保されたままになります。

テキストファイルの読み書き

ファイルオブジェクトのメソッドを使って、ファイルの内容を操作します。

書き込み

write() メソッドは、文字列をファイルに書き込みます。このメソッドは書き込んだ文字数を返します。

Python 実行環境
ブラウザ上で動作するPython3.13.2のREPL実行環境です。
プロンプト (>>>) の後にコマンドを入力し、Enterキーで実行します。
Ctrl+Cまたは左上の停止ボタンで実行中のコマンドを中断できます。
>>> f = open('test.txt', 'w', encoding='utf-8')
>>> f.write('こんにちは、世界!\n')
9
>>> f.write('これは2行目です。\n')
9
>>> f.close()

write() は自動的には改行しないため、必要であれば自分で改行コード \n を追加します。

出力されたファイル(編集不可):test.txt
こんにちは、世界!
これは2行目です。

読み込み

ファイルからデータを読み込むには、いくつかの方法があります。

  • read(): ファイルの内容全体を一つの文字列として読み込みます。
  • readline(): ファイルから1行だけを読み込み、文字列として返します。
  • readlines(): ファイルのすべての行を読み込み、各行を要素とするリストで返します。
Python 実行環境
ブラウザ上で動作するPython3.13.2のREPL実行環境です。
プロンプト (>>>) の後にコマンドを入力し、Enterキーで実行します。
Ctrl+Cまたは左上の停止ボタンで実行中のコマンドを中断できます。
>>> # 先ほど書き込んだファイルを読み込む
>>> f = open('test.txt', 'r', encoding='utf-8')
>>> content = f.read()
>>> print(content)
こんにちは、世界!
これは2行目です。

>>> f.close()

>>> # readline() を使って1行ずつ読む
>>> f = open('test.txt', 'r', encoding='utf-8')
>>> f.readline()
'こんにちは、世界!\n'
>>> f.readline()
'これは2行目です。\n'
>>> f.readline() # ファイルの終端に達すると空文字列を返す
''
>>> f.close()

with文による安全なファイル操作(コンテキストマネージャ)

ファイルを open() したら close() する必要がありますが、処理中に例外が発生すると close() が呼ばれない可能性があります。これを確実に、そして簡潔に書く方法が with 文です。

with 文のブロックを抜けると、ファイルオブジェクトは自動的に close() されます。エラーが発生した場合でも同様です。これは「コンテキストマネージャ」という仕組みによって実現されており、ファイル操作の標準的な方法です。

Python 実行環境
ブラウザ上で動作するPython3.13.2のREPL実行環境です。
プロンプト (>>>) の後にコマンドを入力し、Enterキーで実行します。
Ctrl+Cまたは左上の停止ボタンで実行中のコマンドを中断できます。
>>> # with文を使った書き込み
>>> with open('spam.txt', 'w', encoding='utf-8') as f:
...     f.write('withブロックを使っています。\n')
...     f.write('ブロックを抜けると自動で閉じられます。\n')
... 
>>> # ブロックの外ではファイルは閉じている
>>> f.closed
True

>>> # with文を使った読み込み
>>> with open('spam.txt', 'r', encoding='utf-8') as f:
...     data = f.read()
... 
>>> print(data)
withブロックを使っています。
ブロックを抜けると自動で閉じられます。


このように、with 文を使えば close() の呼び出しを忘れる心配がなく、コードもすっきりします。今後は常に with 文を使ってファイルを扱うようにしましょう。

出力されたファイル(編集不可):spam.txt
withブロックを使っています。
ブロックを抜けると自動で閉じられます。

jsonモジュールを使ったJSONの操作

JSON (JavaScript Object Notation) は、データ交換フォーマットとして広く使われています。Pythonの標準ライブラリである json モジュールを使うと、Pythonのオブジェクト(辞書やリストなど)をJSON形式のデータに、またはその逆に変換できます。

  • json.dump(obj, fp): Pythonオブジェクト obj をJSON形式でファイルオブジェクト fp に書き込みます。
  • json.load(fp): JSON形式のファイルオブジェクト fp からデータを読み込み、Pythonオブジェクトに変換します。
Python 実行環境
ブラウザ上で動作するPython3.13.2のREPL実行環境です。
プロンプト (>>>) の後にコマンドを入力し、Enterキーで実行します。
Ctrl+Cまたは左上の停止ボタンで実行中のコマンドを中断できます。
>>> import json

>>> # 書き込むデータ(Pythonの辞書)
>>> data = {
...     "name": "Taro Yamada",
...     "age": 30,
...     "is_student": False,
...     "courses": ["Python", "Machine Learning"]
... }

>>> # with文を使ってJSONファイルに書き込む
>>> with open('user.json', 'w', encoding='utf-8') as f:
...     # ensure_ascii=Falseで日本語をそのまま出力
...     json.dump(data, f, indent=4, ensure_ascii=False)
... 

>>> # JSONファイルから読み込む
>>> with open('user.json', 'r', encoding='utf-8') as f:
...     loaded_data = json.load(f)
... 
>>> loaded_data
{'name': 'Taro Yamada', 'age': 30, 'is_student': False, 'courses': ['Python', 'Machine Learning']}
>>> loaded_data['name']
'Taro Yamada'

json.dump() の indent=4 は、人間が読みやすいように4スペースのインデントを付けて出力するオプションです。ensure_ascii=False は、日本語などの非ASCII文字をそのままの文字で出力するために指定します。

出力されたファイル(編集不可):user.json
{
    "name": "Taro Yamada",
    "age": 30,
    "is_student": false,
    "courses": [
        "Python",
        "Machine Learning"
    ]
}

csvモジュールを使ったCSVの操作

CSV (Comma-Separated Values) は、スプレッドシートやデータベースでよく使われる表形式のデータを保存するためのフォーマットです。csv モジュールを使うと、CSVファイルの読み書きが簡単になります。

CSVファイルへの書き込み

csv.writer() を使ってライターオブジェクトを作成し、writerow() (1行) や writerows() (複数行) メソッドでデータを書き込みます。

Python 実行環境
ブラウザ上で動作するPython3.13.2のREPL実行環境です。
プロンプト (>>>) の後にコマンドを入力し、Enterキーで実行します。
Ctrl+Cまたは左上の停止ボタンで実行中のコマンドを中断できます。
>>> import csv

>>> # 書き込むデータ(リストのリスト)
>>> data_to_write = [
...     ["ID", "Name", "Score"],
...     [1, "Alice", 95],
...     [2, "Bob", 88],
...     [3, "Charlie", 76]
... ]

>>> # newline='' はWindowsでの不要な空行を防ぐためのおまじない
>>> with open('scores.csv', 'w', newline='', encoding='utf-8') as f:
...     writer = csv.writer(f)
...     writer.writerows(data_to_write)
... 

出力されたファイル(編集不可):scores.csv
ID,Name,Score
1,Alice,95
2,Bob,88
3,Charlie,76

CSVファイルの読み込み

csv.reader() を使ってリーダーオブジェクトを作成します。このオブジェクトをループで回すことで、1行ずつリストとしてデータを取得できます。

Python 実行環境
ブラウザ上で動作するPython3.13.2のREPL実行環境です。
プロンプト (>>>) の後にコマンドを入力し、Enterキーで実行します。
Ctrl+Cまたは左上の停止ボタンで実行中のコマンドを中断できます。
>>> import csv

>>> with open('scores.csv', 'r', newline='', encoding='-utf-8') as f:
...     reader = csv.reader(f)
...     # リーダーオブジェクトはイテレータなのでforループで回せる
...     for row in reader:
...         print(row)
... 
['ID', 'Name', 'Score']
['1', 'Alice', '95']
['2', 'Bob', '88']
['3', 'Charlie', '76']

注意点として、csvモジュールはすべてのデータを文字列として読み込みます。数値として扱いたい場合は、自分で int() や float() を使って型変換する必要があります。

この章のまとめ

この章では、Pythonを使った基本的なファイルの入出力について学びました。

  • open() 関数: ファイルを開き、ファイルオブジェクトを取得するための基本です。モード ('r', 'w', 'a') とエンコーディング ('utf-8') の指定が重要です。
  • ファイルメソッド: .read(), .readline(), .write() といったメソッドを使って、ファイルの内容を操作します。
  • with 文: ファイルを自動的に閉じるための最も安全で推奨される方法です。コンテキストマネージャの仕組みにより、後片付けが確実に行われます。
  • json モジュール: Pythonの辞書やリストを、広く使われているデータ形式であるJSONとして読み書きするために使用します。json.dump() と json.load() が中心的な関数です。
  • csv モジュール: カンマ区切りの表形式データを扱うためのモジュールです。csv.writer() と csv.reader() を使って、行単位での読み書きを簡単に行えます。

ファイル操作は、プログラムの設定を保存したり、処理結果を記録したり、他のシステムとデータをやり取りしたりするなど、あらゆるアプリケーションで必要となる基本的なスキルです。

練習問題1: ユーザー情報の書き出しと読み込み

  1. 以下の情報を持つユーザーのデータを、Pythonの辞書として作成してください。
    • id: 101
    • name: "Sato Kenji"
    • email: "kenji.sato@example.com"
  2. この辞書を、with 文と json モジュールを使って user_profile.json という名前のファイルに書き出してください。その際、人間が読みやすいようにインデントを付けてください。
  3. 書き出した user_profile.json ファイルを読み込み、内容をコンソールに表示してください。
ファイルを編集:practice7_1.py
python practice7_1.py
ブラウザ上で動作するPython3.13.2の実行環境です。
左上の実行ボタンを押して、このページ内のpractice7_1.pyに書かれている内容を実行します。
(出力例) {'id': 101, 'name': 'Sato Kenji', 'email': 'kenji.sato@example.com'}
出力されたファイル(編集不可):user_profile.json

練習問題2: 売上データのCSV集計

あなたは店舗の売上データ(CSV形式)を処理する必要があります。以下の手順でプログラムを作成してください。

  1. sales.csv ファイルを読み込みモードで開きます。
  2. csv.reader を使ってデータを1行ずつ読み込み、ヘッダー行(1行目)は無視してください。
  3. 各商品の「価格」と「数量」を掛け合わせ、その行の売上金額を計算します。
  4. すべての商品の合計売上金額を計算し、最後に「合計売上: XXXX円」という形式でコンソールに出力してください。

ヒント: csv モジュールで読み込んだ値はすべて文字列型です。計算する前に int() を使って整数型に変換する必要があります。

出力されたファイル(編集不可):sales.csv
商品,価格,数量
リンゴ,120,3
バナナ,80,5
オレンジ,150,2
ブドウ,300,1
ファイルを編集:practice7_2.py
python practice7_2.py
ブラウザ上で動作するPython3.13.2の実行環境です。
左上の実行ボタンを押して、このページ内のpractice7_2.pyに書かれている内容を実行します。
(出力例) 合計売上: 1360円
前のページ« オブジェクト指向プログラミング
次のページ例外処理 »