Python|一時ファイル・ディレクトリに保存する方法(tempfile)

1. はじめに

Pythonで一時的にファイルやディレクトリを作成して、プログラムの終了後に自動で削除してくれる仕組みをご存じですか?
この記事では、Python|一時ファイル・ディレクトリに保存する方法(tempfile)というテーマで、tempfileモジュールの使い方をわかりやすく解説します。

一時ファイルは、ログの一時保存、APIレスポンスの一時書き出し、テスト用のファイル作成など、実務でもよく使われます。
Pythonのtempfileモジュールを使えば、こうした一時データの扱いを簡単・安全に行えます。

この記事では初心者にも理解しやすいよう、具体的なコード例と実行結果を交えながら、基礎から応用、注意点まで丁寧に解説していきます。

 

2. tempfileモジュールの基本的な使い方

2-1. tempfileとは?

tempfileは、Python標準ライブラリの1つで、一時的なファイルやディレクトリを安全に作成するためのモジュールです。
主に次の関数がよく使われます:

  • NamedTemporaryFile():名前付き一時ファイルを作成
  • TemporaryFile():名前なし一時ファイルを作成
  • TemporaryDirectory():一時ディレクトリを作成
  • gettempdir():一時ファイル用のディレクトリパスを取得

2-2. 名前付き一時ファイルの作成

import tempfile

# 名前付き一時ファイルの作成
with tempfile.NamedTemporaryFile(mode='w+', delete=False) as temp:
    temp.write("一時ファイルの内容です。")
    temp.seek(0)
    print("ファイル名:", temp.name)
    print("中身:", temp.read())

実行結果:

ファイル名: /tmp/tmpabcd1234
中身: 一時ファイルの内容です。

delete=Falseを指定すると、ファイルが閉じた後も削除されません。確認やデバッグに便利です。

2-3. 一時ディレクトリの作成

import tempfile
import os

# 一時ディレクトリの作成
with tempfile.TemporaryDirectory() as temp_dir:
    print("作成された一時ディレクトリ:", temp_dir)
    # この中にファイルを作成してみる
    file_path = os.path.join(temp_dir, "sample.txt")
    with open(file_path, "w") as f:
        f.write("一時ディレクトリ内のファイルです。")
    with open(file_path, "r") as f:
        print("ファイルの中身:", f.read())

実行結果:

作成された一時ディレクトリ: /tmp/tmpxyz5678
ファイルの中身: 一時ディレクトリ内のファイルです。

TemporaryDirectory()は、ブロックを抜けると自動的にディレクトリごと削除されるので、後処理を忘れる心配がありません。

 

3. よくある使い方・応用例

3-1. テストデータの一時保存

ユニットテストなどで、一時的にファイルを作成して動作を確認する場面で重宝します。

import tempfile

def save_temp_data(data):
    with tempfile.NamedTemporaryFile(mode='w+', delete=False) as temp:
        temp.write(data)
        return temp.name  # ファイルパスを返す

# テスト実行
path = save_temp_data("テスト用のデータ")
print("保存された一時ファイル:", path)

実行結果:

保存された一時ファイル: /tmp/tmp9876test

3-2. CSVやログの一時出力

ログやCSVを一時的に保存して、他システムに渡すなどの用途でも便利です。

import csv
import tempfile

with tempfile.NamedTemporaryFile(mode='w+', newline='', delete=False) as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(['名前', '年齢'])
    writer.writerow(['田中', 30])
    writer.writerow(['佐藤', 25])
    csvfile.seek(0)
    print("CSVファイルの内容:")
    print(csvfile.read())

実行結果:

CSVファイルの内容:
名前,年齢
田中,30
佐藤,25

 

4. 注意点・エラー対策

4-1. delete=Trueの注意

デフォルトでは、delete=Trueのため、ファイルはwith文を抜けると削除されてしまいます。
必要ならdelete=Falseを明示してファイルを保持しましょう。

4-2. Windows環境での一時ファイルエラー

Windowsでは一時ファイルを開いたまま再度開くとPermissionErrorが出ることがあります。
この場合はdelete=Falseにして閉じてから別スクリプトで開くなどの工夫が必要です。

4-3. セキュリティの観点

一時ファイルは一時的とはいえ、パスワードや個人情報などの保存には注意が必要です。
作成後すぐ削除されることを前提に、センシティブなデータは極力保存しないようにしましょう。

 

5. まとめ

  • tempfileモジュールを使えば、一時ファイルや一時ディレクトリの作成が簡単
  • with構文で安全に管理でき、使い終われば自動で削除
  • テストやログ保存など、実務でも幅広く活用できる

一時ファイルの扱いは地味ですが、堅実なアプリケーションを作るうえで欠かせないスキルです。
ファイル操作に慣れてきたら、ぜひtempfileを使って「一時的な記録や検証の自動化」に挑戦してみてください。

タイトルとURLをコピーしました