Pythonでのファイル読み書き:with open()による安全なファイル操作

この記事では、Pythonでテキストファイルの読み込みと書き込みを行うための基本的な方法を解説します。特に、ファイルを安全かつ確実に扱うための現代的なwith文の使用法に焦点を当てます。


目次

モダンで安全なファイル操作:with

Pythonでファイルを操作する際の推奨される方法は、with文を使うことです。with open(...) as ...:という構文は、ブロック内の処理が終わると、エラーが発生した場合でも自動的にファイルを閉じてくれるため、非常に安全です。

基本的な構文は以下の通りです。 with open('ファイルパス', 'モード') as file_object:


ファイルの読み込み

ファイルからテキストを読み込むには、モードに'r'(read)を指定します。

ファイル全体を一度に読み込む read()メソッドは、ファイルの内容全体を一つの文字列として返します。

# 'note.txt'というファイルに'Hello, Python.\nThis is a test.'と書かれていると仮定
try:
    with open('note.txt', 'r', encoding='utf-8') as f:
        content = f.read()
        print(content)
except FileNotFoundError:
    print("エラー: note.txtが見つかりません。")

encoding='utf-8'は、日本語などの非ASCII文字を正しく扱うための推奨される指定です。

一行ずつリストとして読み込む readlines()メソッドは、ファイルの内容を一行ずつ文字列としてリストに格納して返します。

try:
    with open('note.txt', 'r', encoding='utf-8') as f:
        lines = f.readlines()
        print(lines) # 出力: ['Hello, Python.\n', 'This is a test.']
except FileNotFoundError:
    print("エラー: note.txtが見つかりません。")

ファイルへの書き込み

ファイルにテキストを書き込むには、主に'w'(write)と'a'(append)の2つのモードがあります。

書き込みモード ('w') モード'w'は、ファイルに書き込みを行います。ファイルが既に存在する場合、その内容は上書きされます。ファイルが存在しない場合は、新しく作成されます。

# 'log.txt'に新しい内容を書き込む(既存の内容は消える)
with open('log.txt', 'w', encoding='utf-8') as f:
    f.write('First log entry.\n')

追記モード ('a') モード'a'は、ファイルの末尾に内容を追記します。既存の内容は保持されます。ファイルが存在しない場合は、新しく作成されます。

# 'log.txt'の末尾に追記する
with open('log.txt', 'a', encoding='utf-8') as f:
    f.write('Second log entry.\n')

# 内容を確認
with open('log.txt', 'r', encoding='utf-8') as f:
    print(f.read())

実行結果:

First log entry.
Second log entry.

従来のopen()close()

with文を使わずに、open()でファイルを開き、手動でclose()メソッドを呼び出す方法もあります。

f = open('legacy.txt', 'w', encoding='utf-8')
f.write('This is a legacy method.')
f.close() # 手動で閉じる必要がある

この方法は、close()を呼び忘れたり、処理中にエラーが発生してclose()が実行されないリスクがあるため、現在ではwith文の使用が強く推奨されています。

まとめ

Pythonでのファイル操作はopen()関数で行います。ファイルを安全に扱うためには、自動でクローズ処理を行ってくれるwith文を使用するのが現代の標準的な方法です。読み込みには'r'モード、上書き書き込みには'w'モード、追記には'a'モードを使い分けます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次