テンポラリディレクトリを作成する
自動削除されるテンポラリディレクトリ (TemporaryDirectory)
Python の tempfile モジュールが提供する TemporaryDirectory
クラスを使用して、テンポラリディレクトリを作成することができます。
TemporaryDirectory
オブジェクトを with
文に渡すと、as
節の変数として、作成されたテンポラリディレクトリのパスを取得できます。
テンポラリディレクトリは、with
ブロックの実行コンテキストを抜けるときに自動的に削除されることに注意してください(__exit__
メソッドの実装で cleanup
メソッドが呼ばれており、自動的にディレクトリが削除される仕組みになっています)。
よって、Python プログラムの中で、明示的にテンポラリディレクトリを削除する必要はありません。
自動削除されないテンポラリディレクトリ (mkdtemp)
実行コンテキストを抜けても自動削除されないテンポラリディレクトリを作成したい場合は、tempfile.TemporaryDirectory
クラスの代わりに、tempfile.mkdtemp 関数を使用します。
作成されたテンポラリディレクトリは、プログラムを終了してからユーザーが手動で削除しなければいけないので、分かりやすいディレクトリに作成しておいた方がよいでしょう。
次の例では、カレントディレクトリ (.
) に、.tmp
サフィックスの付いたテンポラリディレクトリを作成しています。
この Python プログラムを実行終了した後にも、テンポラリディレクトリが残っていることを確認してください。
ちなみに、dir
、prefix
, suffix
といったパラメーターは、tempfile.TemporaryDirectory
クラスのコンストラクタにも指定できますが、あまり使用することはないでしょう(自動削除されるのでパスを知る必要がない)。
テンポラリファイルを作成する
自動削除されるテンポラリファイル (TemporaryFile)
テンポラリファイルを作成するには、tempfile.TemporaryFile 関数を使用します。
この関数は、open
関数と同様にファイルオブジェクトを返します。
パラメーターにも open
関数と同様のものを指定できます。
次の例では、テキスト形式で読み書き可能なテンポラリファイルを作成しています。
同じファイルオブジェクトで書き込みと読み取りを行うため、mode
パラメーターには "w+"
を指定しています。
TemporaryDirectory
と同様に、TemporaryFile
で作成したテンポラリファイルは、with
文の実行コンテキストを抜けるときに自動的に削除されることに注意してください。
パスを取得可能なテンポラリファイル (NamedTemporaryFile)
テンポラリファイルの名前が必要な場合は、TemporaryFile
の代わりに、NamedTemporaryFile
を使用する必要があります。
こちらを使わないと、ファイルオブジェクトの name
プロパティでファイル名を参照できません。
自動削除されないテンポラリファイル (mkstemp)
実行コンテキストを抜けても自動削除されないテンポラリファイルを作るには、tempfile.mkstemp 関数を使用します。
指定できるパラメーターは mkdtemp 関数によるディレクトリ作成とほぼ同様で、出力先のディレクトリ (dir
) や、プレフィックス (prefix
)、サフィックス (suffix
) を指定できます。
mkstemp
関数は、戻り値としてテンポラリファイルのデスクリプター (int
) とファイル名 (str
) を返します。
NamedTemporaryFile
関数で delete=False
プロパティを指定することでも、自動削除されないテンポラリファイルを作成できるようです。