0Pricing
Python Academy · レッスン

ファイル操作で with 文を使う

コンテキストマネージャーを使って、ファイルが自動的に閉じられるようにします。

「ファイル操作で with 文を使う」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。

はじめに

with 文を使うと、例外が発生した場合でもファイルが自動的に閉じられます。

with 文

with open('file.txt') as f: ... と記述すると、通常どおりにブロックを抜けた場合でも、例外によって抜けた場合でも、f が自動的に閉じられます。
# with open('data.txt') as f:
#     content = f.read()
# f is now closed
print('with demo')

try/finally より with が優れている理由

with を使わない場合、確実にファイルを閉じるために try: ... finally: f.close() と記述する必要があります。with ならこれを自動的に処理できます。
# Equivalent to:
# f = open('file.txt')
# try:
#     content = f.read()
# finally:
#     f.close()
print('comparison demo')

複数のファイル

with open('a.txt') as a, open('b.txt') as b: と記述すると、1つの文で2つのファイルを開けます。
# with open('in.txt') as src, open('out.txt','w') as dst:
#     for line in src:
#         dst.write(line.upper())
print('multi-file demo')

コンテキストマネージャープロトコル

with は __enter__ と __exit__ を使用します。open() は、これらを実装したファイルオブジェクトを返します。後ほど独自のものを作成します。
# f.__enter__() opens
# f.__exit__() closes
print('protocol demo')

読み込みと処理

with、for line in f:、.strip() を組み合わせると、改行を取り除いたり空行をスキップしたりする、整った行処理を実行できます。
lines = ['  hello  \n', '  world  \n']
cleaned = [l.strip() for l in lines if l.strip()]
print(cleaned)

with を使った書き込み

with open('out.txt','w') as f: f.write('data') とすると、ブロックを抜けるときにファイルがフラッシュされて閉じられます。
# with open('out.txt', 'w') as f:
#     for i in range(10):
#         f.write(f'{i}\n')
print('write with demo')

ファイルの存在確認

import os; os.path.exists('file.txt') は、ファイルが存在する場合に True を返します。FileNotFoundError の防止に役立ちます。
import os
print(os.path.exists('/tmp'))
print(os.path.exists('/nonexistent'))

open() のエラー

FileNotFoundError は、ファイルが存在しないことを示します。PermissionError は、読み書きの権限がないことを示します。堅牢に処理するには try/except で囲んでください。
try:
    with open('/nonexistent.txt') as f:
        pass
except FileNotFoundError as e:
    print('File not found:', e)

メモリ上のファイルに使う StringIO

from io import StringIO を使うと、文字列をファイルオブジェクトとして扱えます。ファイル処理コードのテストに最適です。
from io import StringIO
buf = StringIO('line1\nline2\n')
for line in buf:
    print(line.rstrip())

tempfile モジュール

tempfile.NamedTemporaryFile() は、閉じると削除される一時ファイルを作成します。一時的なデータ処理を安全に行えます。
import tempfile
with tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=True) as f:
    f.write('temp data')
    print(f.name)

クイックチェック

ファイル I/O で with 文を使うと、何が保証されますか?

まとめ

with open(f) as h: とすると、h が自動的に閉じられます。複数のファイルには複数の対象を指定してください。メモリ上でのテストには StringIO を使います。FileNotFoundError は適切に処理してください。

次へ進みましょう

よくできました。次のレッスンに進んで、学習を続けましょう。

よくある質問

「ファイル操作で with 文を使う」レッスンは無料ですか?

はい。「ファイル操作で with 文を使う」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。

「ファイル操作で with 文を使う」で何を学びますか?

コンテキストマネージャーを使って、ファイルが自動的に閉じられるようにします。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Python Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「ファイル操作で with 文を使う」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPython Academyレッスンでコードを書いて実行できますか?

はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ファイルの開き方と読み取り方
  2. ファイルへの書き込みと追記
  3. ファイル操作で with 文を使う
  4. pathlib によるファイルパス操作
← Python Academyに戻る