Pythonのファイルの操作

投稿日: 2024年3月12日

ファイルの行単位の操作は、特にテキストファイルを扱う際に便利です。

ファイルの行単位の操作

ファイルから行単位で読み取る場合、readlines()メソッドを使用するか、ファイルオブジェクトを直接イテレートすることができます。
この方法では、ファイルの内容を一度に一行ずつ読み込むため、大きなファイルを扱う場合でもメモリを節約することができます。

ファイルの各行を読み込む

with open('filename.txt', 'r') as file:
    for line in file:
        print(line.strip())

この例では、with文を使用してfilename.txtを読み取りモードで開いています。
ファイルオブジェクトfileを直接forループでイテレートし、ループの各反復でファイルから次の行を読み込んでいます。strip()メソッドを使って行末の改行文字を削除し、行の内容のみを表示しています。

ファイルの各行をリストとして読み込む

ファイルの全行を一度にリストとして読み込みたい場合は、readlines()メソッドを使用します。これにより、ファイルの各行がリストの各要素として格納されます。

with open('filename.txt', 'r') as file:
    lines = file.readlines()

# 各行を処理
for line in lines:
    print(line.strip())

この例では、readlines()メソッドを使ってファイルの全行を一度に読み込み、その後で各行を一つずつ処理しています。

ファイルに行を書き込む

ファイルにテキストを行単位で書き込む場合も、同様に簡単です。
以下の例では、リストの各要素をファイルの新しい行として書き込んでいます\n(\n)は、テキストにおいて新しい行(改行)を始めるための特殊文字(エスケープシーケンス)です。

lines_to_write = ['First line\n', 'Second line\n', 'Third line\n']

with open('filename.txt', 'w') as file:
    file.writelines(lines_to_write)

この例では、writelines()メソッドを使用して、複数の行を含むリストlines_to_writeをファイルに一度に書き込んでいます。リストの各要素がファイルの新しい行となります。
各要素の末尾には改行文字\nを含めることが重要です。

これは何に使えたりするんですか?

代表的なのはログファイルになるね。

はい、Pythonでファイルの行単位の操作を使ってログファイルを作成することは可能です。
ログファイルはアプリケーションの動作状況、エラーメッセージ、その他重要な情報を時系列で記録するために用いられます。

基本的なログファイルの作成例

以下は、基本的なログファイルを作成し、いくつかのログメッセージを追記するシンプルな例です。

from datetime import datetime

# ログメッセージをファイルに追記する関数
def add_log(message, filename='filename.txt'):
    # 現在の日時を取得
    now = datetime.now()
    timestamp = now.strftime("%Y-%m-%d %H:%M:%S")
    
    # ログメッセージをフォーマット
    log_message = f"[{timestamp}] {message}\n"
    
    # 指定されたファイルに追記
    with open(filename, 'a') as log_file:
        log_file.write(log_message)

# ログメッセージの追加
add_log("アプリケーション起動")
add_log("処理を開始")
add_log("エラー: ファイルが見つからない")
add_log("処理を終了")

このコードは、filename.txtファイルに対して4つの異なるログメッセージを追加します。
関数add_logは、ログメッセージとファイル名(ここではデフォルトでfilename.txt)を引数として受け取ります。
各メッセージは、現在の日時とともにファイルの末尾に追記されます。withステートメントが使用されているため、ファイルの操作が完了すると自動的にファイルが閉じられます。

ファイルの存在チェック

ファイルやディレクトリが存在するかどうかをチェックするには、os.path.exists()関数を使用します。

import os
if os.path.exists('filename.txt'):
    print('ファイルが存在します。')
else:
    print('ファイルが存在しません。')

ファイルの行単位の操作は、ログファイルの解析、設定ファイルの読み込み、テキストデータの処理など、多くの場面で役立ちます。
Pythonのファイル操作メソッドを活用することで、これらのタスクを効率的に行うことができます。

記事