👋
【Python】一時ファイル・デイレクトリの作成(tempfile)
tempfileモジュール
Pythonで一時ファイル・デイレクトリを作成する場合は、組み込のモジュールtempfile
を使用すると便利です。
使い終わった後の自動削除方法(自動削除する/しおい)など目的に応じて使い分けられるように用意されていますので柔軟に利用することができます。
準備
tempfile
モジュールをインポートします。
import tempfile
TemporaryFile()
TemporaryFile()
を使って作成するファイルは、I/Oバッファ(一時的な記憶領域)上に作成され、オブジェクトを閉じたタイミングでシステム上から自動削除されます。
import tempfile
with tempfile.TemporaryFile(mode='w+') as t:
t.write('hello')
t.seek(0)
print(t.read())
-
with
ステートメントを使って、TemporaryFile()
を読み書きモードで開く - ファイルへ
hello
と記述 -
seek()
を使ってカーソルを先頭へ移動 -
print()
で一時ファイルの内容を出力
NamedTemporaryFile()
NamedTemporaryFile()
は、TemporaryFile()
とは異なり、一時的に物理ファイルを作成します。
import os
import tempfile
with tempfile.NamedTemporaryFile(delete=True) as t:
print(t.name)
with open(t.name, 'w+') as f:
f.write('書込確認\n')
f.seek(0)
print(f.read())
print('Close前: ', t.name, os.path.isfile(t.name))
print('Close後: ', t.name, os.path.isfile(t.name))
-
with
ステートメントを使って、NamedTemporaryFile()
を開く
キーワード引数であるdelete=True
は省略可能 - 作成された一時ファイルの格納先を保持するname属性を
print()
で確認 -
with
ステートメントを使って、作成した一時ファイルを開く -
write
で一時ファイルに書き込み -
seek()
を使ってカーソルを先頭へ移動 -
print()
で一時ファイルの内容を出力 - ファイルクローズ前である
with
ステートメント内でos.path.isfile()
を使い、作成した一時ファイルの存在することを確認(True=存在) - ファイルクローズ後である
with
ステートメント外でos.path.isfile()
を使って、作成した一時ファイルが存在しないことを確認(False=存在しない)
実行結果
書込確認
Close前: /var/folders/k8/n4hh2wbn0vz0hmfglrqh4v2c0000gn/T/tmp4lxgdhlc True
Close後: /var/folders/k8/n4hh2wbn0vz0hmfglrqh4v2c0000gn/T/tmp4lxgdhlc False
TemporaryDirectory()
TemporaryDirectory()では、一時ディレクトリを作成します。
作成された一時ディレクトリは閉じた時点で自動削除されます。
with tempfile.TemporaryDirectory() as td:
print(td)
print('Close前: ', td, os.path.isdir(td))
print('Close前: ', td, os.path.isdir(td))
-
with
ステートメントを使って、TemporaryDirectory()
を開く -
print()
を使って、作成された一時ディレクトリのパスを表示 - ファイルクローズ前である
with
ステートメント内でos.path.isdir()
を使い作成した一時ディレクトリが存在することを確認(True=存在) - ファイルクローズ外である
with
ステートメント外でos.path.isdir()
を使い作成した一時ディレクトリが存在しないことを確認(False=存在しない)
mkdtemp()
TemporaryDirectory()
のように自動削除されると困る(with
ステートメント外でも使用したい)場合は、mkdtemp()
を使用します。
-
mkdtemp()
を使って一時ディレクトリを作成 -
print()
を使って、作成された一時ディレクトリのパスを出力
Discussion