tempfile —一時ファイルとディレクトリを生成します
ソースコード: :source: `Lib / tempfile.py`
このモジュールは、一時ファイルとディレクトリを作成します。 サポートされているすべてのプラットフォームで動作します。 TemporaryFile 、 NamedTemporaryFile 、 TemporaryDirectory 、および PooledTemporaryFile は、自動クリーンアップを提供し、コンテキストマネージャーとして使用できる高レベルのインターフェイスです。 mkstemp()および mkdtemp()は、手動のクリーンアップが必要な低レベルの関数です。
すべてのユーザー呼び出し可能な関数とコンストラクターは、一時ファイルとディレクトリーの場所と名前を直接制御できるようにする追加の引数を取ります。 このモジュールで使用されるファイル名には、共有一時ディレクトリにそれらのファイルを安全に作成できるようにするランダムな文字列が含まれています。 下位互換性を維持するために、引数の順序はやや奇妙です。 わかりやすくするために、キーワード引数を使用することをお勧めします。
このモジュールは、次のユーザー呼び出し可能なアイテムを定義します。
- tempfile.TemporaryFile(mode='w+b', buffering=- 1, encoding=None, newline=None, suffix=None, prefix=None, dir=None, *, errors=None)
一時記憶域として使用できるファイルのようなオブジェクトを返します。 ファイルは、 mkstemp()と同じルールを使用して安全に作成されます。 閉じられるとすぐに破棄されます(オブジェクトがガベージコレクションされた場合の暗黙的な閉じを含む)。 Unixでは、ファイルのディレクトリエントリはまったく作成されないか、ファイルの作成直後に削除されます。 他のプラットフォームはこれをサポートしていません。 コードは、この関数を使用して作成された一時ファイルに依存してはなりません。ファイルシステムに名前が表示されているかどうかは関係ありません。
結果のオブジェクトは、コンテキストマネージャーとして使用できます(例を参照)。 コンテキストが完了するか、ファイルオブジェクトが破棄されると、一時ファイルがファイルシステムから削除されます。
mode パラメーターのデフォルトは
'w+b'
であるため、作成されたファイルは閉じずに読み書きできます。 バイナリモードは、保存されているデータに関係なく、すべてのプラットフォームで一貫して動作するように使用されます。 バッファリング、エンコーディング、エラーおよび改行は、 open()と同様に解釈されます。dir 、プレフィックス、およびサフィックスパラメーターは、 mkstemp()と同じ意味とデフォルトを持ちます。
返されるオブジェクトは、POSIXプラットフォーム上の真のファイルオブジェクトです。 他のプラットフォームでは、
file
属性が基になる真のファイルオブジェクトであるファイルのようなオブジェクトです。os.O_TMPFILE フラグは、使用可能で機能している場合に使用されます(Linux固有、Linuxカーネル3.11以降が必要)。
バージョン3.5で変更: os.O_TMPFILE フラグが使用可能な場合に使用されるようになりました。
バージョン3.8で変更: エラーパラメーターが追加されました。
- tempfile.NamedTemporaryFile(mode='w+b', buffering=- 1, encoding=None, newline=None, suffix=None, prefix=None, dir=None, delete=True, *, errors=None)
この関数は、 TemporaryFile()とまったく同じように動作しますが、ファイルがファイルシステムで表示される名前であることが保証されている点が異なります(Unixでは、ディレクトリエントリはリンク解除されません)。 その名前は、返されたファイルのようなオブジェクトの
name
属性から取得できます。 名前付き一時ファイルがまだ開いているときに、名前を使用してファイルを2回開くことができるかどうかは、プラットフォームによって異なります(Unixで使用できますが、Windows NT以降では使用できません)。 delete がtrue(デフォルト)の場合、ファイルは閉じられるとすぐに削除されます。 返されるオブジェクトは常にファイルのようなオブジェクトであり、そのfile
属性は基になる真のファイルオブジェクトです。 このファイルのようなオブジェクトは、通常のファイルと同じように、 with ステートメントで使用できます。バージョン3.8で変更: エラーパラメーターが追加されました。
- tempfile.SpooledTemporaryFile(max_size=0, mode='w+b', buffering=- 1, encoding=None, newline=None, suffix=None, prefix=None, dir=None, *, errors=None)
この関数は、ファイルサイズが max_size を超えるまで、またはファイルの
fileno()
メソッドが呼び出されるまで、データがメモリにスプールされることを除いて、 TemporaryFile()とまったく同じように動作します。この時点で内容がディスクに書き込まれ、 TemporaryFile()と同様に操作が続行されます。結果のファイルには、
rollover()
という1つの追加メソッドがあります。これにより、ファイルは、サイズに関係なく、ディスク上のファイルにロールオーバーされます。返されるオブジェクトは、
_file
属性が io.BytesIO または io.TextIOWrapper オブジェクトのいずれかであるファイルのようなオブジェクトです(バイナリまたはテキストのどちらであるかによって異なります)。rollover()
が呼び出されたかどうかに応じて、mode が指定されました)またはtrueファイルオブジェクト。 このファイルのようなオブジェクトは、通常のファイルと同じように、 with ステートメントで使用できます。バージョン3.3で変更: truncateメソッドが
size
引数を受け入れるようになりました。バージョン3.8で変更: エラーパラメーターが追加されました。
- tempfile.TemporaryDirectory(suffix=None, prefix=None, dir=None)
この関数は、 mkdtemp()と同じルールを使用して一時ディレクトリを安全に作成します。 結果のオブジェクトは、コンテキストマネージャーとして使用できます(例を参照)。 コンテキストが完了するか、一時ディレクトリオブジェクトが破棄されると、新しく作成された一時ディレクトリとそのすべての内容がファイルシステムから削除されます。
ディレクトリ名は、返されたオブジェクトの
name
属性から取得できます。 返されたオブジェクトがコンテキストマネージャーとして使用される場合、name
は、 with ステートメントのas
句のターゲットに割り当てられます(存在する場合)。cleanup()
メソッドを呼び出すことにより、ディレクトリを明示的にクリーンアップできます。バージョン3.2の新機能。
- tempfile.mkstemp(suffix=None, prefix=None, dir=None, text=False)
可能な限り最も安全な方法で一時ファイルを作成します。 プラットフォームが os.open()の os.O_EXCL フラグを適切に実装していると仮定すると、ファイルの作成に競合状態はありません。 ファイルは、作成するユーザーIDによってのみ読み取りおよび書き込みが可能です。 プラットフォームがパーミッションビットを使用してファイルが実行可能かどうかを示す場合、ファイルは誰も実行可能ではありません。 ファイル記述子は子プロセスに継承されません。
TemporaryFile()とは異なり、 mkstemp()のユーザーは、一時ファイルを使い終わったら削除する責任があります。
サフィックスが
None
でない場合、ファイル名はそのサフィックスで終わります。そうでない場合、サフィックスはありません。 mkstemp()は、ファイル名とサフィックスの間にドットを入れません。 必要な場合は、サフィックスの先頭に配置してください。プレフィックスが
None
でない場合、ファイル名はそのプレフィックスで始まります。 それ以外の場合は、デフォルトのプレフィックスが使用されます。 デフォルトは、必要に応じて gettempprefix()または gettempprefixb()の戻り値です。dir が
None
でない場合、ファイルはそのディレクトリに作成されます。 それ以外の場合は、デフォルトのディレクトリが使用されます。 デフォルトのディレクトリはプラットフォームに依存するリストから選択されますが、アプリケーションのユーザーは、 TMPDIR 、 TEMP 、または TMP 環境を設定することでディレクトリの場所を制御できます。変数。 したがって、生成されたファイル名が、os.popen()
を介して外部コマンドに渡されるときに引用符を必要としないなど、優れたプロパティを持つという保証はありません。サフィックス、プレフィックス、および dir のいずれかが
None
でない場合は、同じタイプである必要があります。 それらがバイトの場合、返される名前はstrではなくbytesになります。 それ以外の場合はデフォルトの動作でバイトの戻り値を強制する場合は、suffix=b
を渡します。text が指定され、trueの場合、ファイルはテキストモードで開かれます。 それ以外の場合(デフォルト)、ファイルはバイナリモードで開かれます。
mkstemp()は、開いているファイルへのOSレベルのハンドル( os.open()によって返される)とそのファイルの絶対パス名を含むタプルを返します。注文。
バージョン3.5で変更: サフィックス、プレフィックス、および dir は、バイトの戻り値を取得するためにバイト単位で指定できるようになりました。 これ以前は、strのみが許可されていました。 サフィックスおよびプレフィックスが受け入れられ、デフォルトで
None
になり、適切なデフォルト値が使用されるようになりました。バージョン3.6で変更: dir パラメーターは、パスのようなオブジェクトを受け入れるようになりました。
- tempfile.mkdtemp(suffix=None, prefix=None, dir=None)
可能な限り最も安全な方法で一時ディレクトリを作成します。 ディレクトリの作成には競合状態はありません。 ディレクトリは、作成するユーザーIDによってのみ読み取り、書き込み、および検索が可能です。
mkdtemp()のユーザーは、一時ディレクトリとその内容を使い終わったら削除する責任があります。
プレフィックス、サフィックス、および dir 引数は、 mkstemp()の場合と同じです。
mkdtemp()は、新しいディレクトリの絶対パス名を返します。
バージョン3.5で変更: サフィックス、プレフィックス、および dir は、バイトの戻り値を取得するためにバイト単位で指定できるようになりました。 これ以前は、strのみが許可されていました。 サフィックスおよびプレフィックスが受け入れられ、デフォルトで
None
になり、適切なデフォルト値が使用されるようになりました。バージョン3.6で変更: dir パラメーターは、パスのようなオブジェクトを受け入れるようになりました。
- tempfile.gettempdir()
一時ファイルに使用されるディレクトリの名前を返します。 これは、このモジュールのすべての関数に対する dir 引数のデフォルト値を定義します。
Pythonは、ディレクトリの標準リストを検索して、呼び出し元のユーザーがファイルを作成できるディレクトリを見つけます。 リストは次のとおりです。
TMPDIR
環境変数によって指定されたディレクトリ。TEMP
環境変数によって指定されたディレクトリ。TMP
環境変数によって指定されたディレクトリ。プラットフォーム固有の場所:
Windowsでは、ディレクトリ
C:\TEMP
、C:\TMP
、\TEMP
、\TMP
の順になります。他のすべてのプラットフォームでは、ディレクトリ
/tmp
、/var/tmp
、/usr/tmp
の順になります。
最後の手段として、現在の作業ディレクトリ。
この検索の結果はキャッシュされます。以下の tempdir の説明を参照してください。
- tempfile.gettempdirb()
gettempdir()と同じですが、戻り値はバイト単位です。
バージョン3.5の新機能。
- tempfile.gettempprefix()
- 一時ファイルの作成に使用されるファイル名プレフィックスを返します。 これには、ディレクトリコンポーネントは含まれていません。
- tempfile.gettempprefixb()
gettempprefix()と同じですが、戻り値はバイト単位です。
バージョン3.5の新機能。
モジュールはグローバル変数を使用して、 gettempdir()によって返される一時ファイルに使用されるディレクトリの名前を格納します。 選択プロセスをオーバーライドするように直接設定できますが、これはお勧めしません。 このモジュールのすべての関数は、ディレクトリを指定するために使用できる dir 引数を取ります。これは、推奨されるアプローチです。
- tempfile.tempdir
None
以外の値に設定すると、この変数は、このモジュールで定義されている関数の dir 引数のデフォルト値を定義します。gettempprefix()を除く上記の関数のいずれかの呼び出しで、
tempdir
がNone
(デフォルト)の場合、 gettempdir( )。
非推奨の関数と変数
一時ファイルを作成する歴史的な方法は、最初に mktemp()関数を使用してファイル名を生成し、次にこの名前を使用してファイルを作成することでした。 残念ながら、これは安全ではありません。 mktemp()が呼び出されてから、最初のプロセスでファイルを作成しようとするまでの間に、別のプロセスがこの名前のファイルを作成する可能性があるためです。 解決策は、2つのステップを組み合わせて、すぐにファイルを作成することです。 このアプローチは、 mkstemp()および上記の他の関数によって使用されます。
- tempfile.mktemp(suffix=, prefix='tmp', dir=None)
バージョン2.3以降非推奨:代わりに mkstemp()を使用してください。
呼び出し時に存在しなかったファイルの絶対パス名を返します。 プレフィックス、サフィックス、および dir 引数は、バイトファイル名
suffix=None
およびprefix=None
はサポートされていません。警告
この機能を使用すると、プログラムにセキュリティホールが発生する可能性があります。 あなたがそれが返すファイル名で何かをすることに取り掛かる時までに、他の誰かがあなたを殴打したかもしれません。 mktemp()の使用法は、 NamedTemporaryFile()に簡単に置き換えることができ、
delete=False
パラメーターを渡します。