、一時ファイルの紹介
モジュールは、一時的なファイルやディレクトリを作成します。これは、すべてのサポートされるプラットフォームに適用されます。TemporaryFile
、、 NamedTemporaryFile
、TemporaryDirectory
およびSpooledTemporaryFile
自動クリーニングを提供し、コンテキストマネージャとして使用することができる高レベルのインタフェースです。mkstemp()
そして、 mkdtemp()
手動での低レベルの機能をクリーンアップする必要があります。
すべての関数とユーザ呼び出し可能なコンストラクタは、一時ファイルやディレクトリの場所と名前を直接制御を可能にする他のパラメータを採用しています。このモジュールは、それはあなたが共有一時ディレクトリに安全にこれらのファイルを作成することができ、ファイル名はランダムな文字列を含んで使用しています。下位互換性を維持、少し奇妙なパラメータの順序を維持するためには、明確化のために、キーワード引数を使用することをお勧めします。
第二に、一時ファイルを作成
1、TemporaryFile
モジュールには、次のユーザー呼び出し可能な項目を定義します。
-
tempfile.
TemporaryFile
(モード= W '+ B'、バッファリングは=なし、エンコーディング=なし、改行=なし、サフィックス=なし、接頭辞=なし、DIR =なし ) -
返し、ファイルのようなオブジェクトを、それが一時的な記憶領域として使用することができます。安全にファイルを作成すると、同じルールを使用してください
mkstemp()
。それは直ちに閉じた後に破壊される(オブジェクトがガベージコレクトされる暗黙近い含みます)。Unixでは、ファイルのディレクトリエントリが作成されていないか、またはファイルを作成した後すぐに削除します。他のプラットフォームでは、この機能をサポートしていません。あなたのコードは、この関数によって作成された一時ファイルの使用に頼るべきではありません、ファイルシステムに表示された名前の有無にかかわらず、ファイルを。得られたオブジェクトは、コンテキストマネージャとして使用することができます。ファイル・オブジェクトのコンテキストまたは破棄が完了した後、一時ファイルはファイルシステムから削除されます。
デフォルトモードのパラメータ
'w+b'
そう読み書きすることができ、作成したファイルは閉じられません。バイナリモードでは、それは関係なく、保存されたデータの、すべてのプラットフォームで同じように動作します。バッファリング、エンコード、および改行として解釈されますopen()
。ディレクトリ、接頭辞と接尾辞のパラメータは同じ意味とデフォルト値を持っています
mkstemp()
。返されるオブジェクトは、プラットフォーム上で真のPOSIXファイルオブジェクトです。他のプラットフォームでは、それは、そのファイルのようなオブジェクト、ある
file
属性本当の基礎となるファイルオブジェクトです。os.O_TMPFILE
フラグが利用可能かつ効果的である場合には、マークの使用(Linuxの固有のは、Linuxカーネルはバージョン3.11以降に必要)。バージョン3.5は、変更されています
os.O_TMPFILE
(使用可能な場合)今、このフラグを使用します。
例:
以下からの一時ファイルのインポートTemporaryFile 「」 ' コンストラクタTemporaryFileクラス、またはファイルオブジェクトを返します。しかし、この文書のオブジェクトという特別な場所 、このプログラムに加えて、1ファイル、プログラムの該当するファイル名が表示されていない 閉鎖されながら2が削除された 「」 ' TEMP = TemporaryFile() #一時ファイルオブジェクトを作成します。 temp.writeは(「こんにちは\ nworld 」) #の一時ファイルへの書き込み #は、一時ファイルの内容を読み temp.seek(0) #1 、方法はあまり求めて実行することはできません再読み込み、および異なるオブジェクトの一般的なファイルを 印刷します( temp.read()) temp.close() #は、削除されたファイルのファイルを閉じます
2、NamedTemporaryFile
-
tempfile.
NamedTemporaryFile
(モード= W '+ B'、緩衝=なし、エンコーディング=なし、改行=なし、サフィックス=なし、接頭辞=なし、DIR =なし、= Trueの削除 ) -
正確TemporaryFileと同じように実行しますNamedTemporaryFile。初期化パラメータを削除NamedTemporaryFile追加したときにことを除いて、デフォルト値はTrueです。これは真とTemporaryFileクラスに完全に一致しているとき。それがFalseの場合、オブジェクトが閉じられたときに、一時ファイルは削除されません。これは、次のコードでは、同じオブジェクトで再び開くことができます。
name
オブジェクトが返されるクラス名属性ファイルを取得。
3、SpooledTemporaryFile
-
tempfile.
SpooledTemporaryFile
(MAX_SIZE = 0、モード= W '+ B'、緩衝=なし、エンコーディング=なし、改行=なし、サフィックス=なし、接頭辞=なし、DIR =なし ) -
この関数はこれと同じである実行
TemporaryFile()
が、メモリ内のスプールデータファイルのサイズがMAX_SIZEを超えるまで、またはまで、fileno()
方法は、コンテンツがディスクに書き込まれる場合には、ファイル、呼び出されるまで、動作を継続TemporaryFile()
。結果のファイルには、追加の方法があり、
rollover()
そのサイズに関係なく、ファイルはディスク・ファイルに移動します。返されるオブジェクトは、そのファイルのようなオブジェクト、ある
_file
属性であるio.BytesIO
かio.StringIO
かどうかに応じて(かどうかを指定されたバイナリまたはテキストモードに応じて)オブジェクトまたは実際のファイルオブジェクト、rollover()
それが呼び出されました。ファイルのようなオブジェクトができるwith
通常のファイルのようなステートメントを使用します。バージョン3.3での変更点は:メソッドは、現在受け入れ切り捨てる
size
パラメータを。
4、はmkstemp
-
tempfile.
mkstemp
(接尾辞=なし、接頭辞=なし、DIR =なし、テキスト=偽 ) -
mkstempの方法が使用されて作成するために、一時ファイルを。この方法は、一時的なファイルを作成するために使用される tempfile.mkstemp関数を呼び出した後、それはタプルは、2つの要素、テンポラリファイルのセキュリティレベルの命令の最初の要素、一時ファイルのパスを示す第2の要素を含む返します。パラメータの接尾辞や接頭辞接尾辞を表し、一時ファイル名の接頭辞; dirは一時ファイルシステム環境変数TMPDIR、TEMPまたはTMPの設定を保存するために、ディレクトリを指定しない場合は、一時ファイルが、配置されているディレクトリを指定し、パラメータのテキストがかどうかを指定しますテキストファイルの形で動作するように、デフォルトはFalseで、動作させるためのバイナリファイルとして表現。
第三に、一時ディレクトリを作成します
1 TemporaryDirectory
tempfile.
TemporaryDirectory
(接尾辞=なし、接頭辞=なし、DIR =なし)
この機能は、安全に一時ディレクトリを作成するためにどのと同じルールを使用していますmkdtemp()
。得られたオブジェクトは、コンテキストマネージャとして使用することができます。コンテキストまたは一時ディレクトリオブジェクトを破棄が完了した後、新たに一時ディレクトリとそのすべての内容作成したファイルシステムから削除されます。
name
プロパティを取得するディレクトリ・オブジェクトの名前を返します。オブジェクトは、コンテキストマネージャとして返された場合に、 name
あろうas
にwith
(もしあれば)は、標的への標的の代入文の句の句。
呼び出すことにより、cleanup()
明示的にディレクトリ方式をオフにします。
バージョン3.2の新機能。
2、mkdtemp
-
tempfile.
mkdtemp
(接尾辞=なし、接頭辞=なし、DIR =なし) -
可能な限りの一時ディレクトリを作成するための最も安全な方法インチ ディレクトリを作成しても、競争ではありません。ディレクトリは、読み取り、書き込み、およびユーザーIDを作成することによって検索することができます。
ユーザーは、
mkdtemp()
完了時に一時ディレクトリとその内容を削除する責任があります。接頭辞、接尾辞とDIRパラメーターは同じです
mkstemp()
。mkdtemp()
新しいディレクトリの絶対パス名を返します。バージョン3.5での変更点:接尾辞、接頭辞とディレクトリが今バイトの戻り値をバイト単位で提供することができます。これに先立ち、唯一STRを許可します。接尾辞と接頭辞は今に受け入れられ、デフォルトで
None
適切なデフォルト値を使用して。
3、gettempdir
-
tempfile.
gettempdir
() -
あなたの一時ファイルのフォルダパスを返すために使用。これは、このモジュールのすべてのパラメータのDir関数のデフォルト値を定義します。
呼び出し元のユーザー・ディレクトリのファイルを作成することができます見つけるために、検索するディレクトリのPythonの標準リスト。リストは、次のとおりです。
-
...で指定されたディレクトリ
TMPDIR
の環境変数。 -
...で指定されたディレクトリ
TEMP
の環境変数。 -
...で指定されたディレクトリ
TMP
の環境変数。 -
プラットフォーム固有の場所:
-
Windowsでは、ディレクトリ
C:\TEMP
、C:\TMP
、\TEMP
、及び\TMP
このためです。 -
他のすべてのプラットフォーム、ディレクトリで
/tmp
、/var/tmp
そして/usr/tmp
このためです。
-
-
最後の、現在の作業ディレクトリとして。
キャッシュの検索結果は、参照してください。
tempdir
以下の手順に。 -
4、gettempdirb
-
tempfile.
gettempdirb
() -
そして、
gettempdir()
まだバイト単位で同じ、戻り値。バージョン3.5で追加。
5、にgettempprefix
-
tempfile.
gettempprefix
() -
一時ファイル名のプレフィックスを作成し返します。これは、ディレクトリコンポーネントが含まれていません。
6、gettempprefixb
-
tempfile.
gettempprefixb
() -
そして、
gettempprefix()
まだバイト単位で同じ、戻り値。バージョン3.5で追加。
モジュールは、返されたディレクトリ名のために一時ファイルを保存するために、グローバル変数を使用していますgettempdir()
。選択プロセスをカバーするために直接設定されますが、そうすることを奨励ないことができます。このモジュールのすべての機能は、推奨される方法ですディレクトリを指定するために使用することができDIRパラメータを、使用されています。
7、TEMPDIR
-
tempfile.
tempdir
-
他の値に設定すると
None
、この変数DIRの値は、このモジュールで定義された関数のデフォルトパラメータを定義します。場合は
tempdir
はいNone
任意のコール機能上記(デフォルト値)がない限り、gettempprefix()
アルゴリズムは、それを初期化するために沿って説明しますgettempdir()
。
第四に、例えば、
次はtempfile
モジュールの典型的な使用のいくつかの例:
インポート一時ファイル #1は、一時ファイルを作成し、データ書き込みの回数 FP = tempfile.TemporaryFile() fp.write(B 「のHello Worldを!」) #2。は、ファイルからデータを読み込む fp.seek(0) FPを.read() #b'Hello世界! #3.ファイルを閉じ、それが削除されます fp.close() #4をコンテキストマネージャと一時ファイルを作成 tempfile.TemporaryFile(とし)FP AS: fp.write(B 「!こんにちは世界」) fp.seek(0) fp.readは() #!b'Hello世界 #のファイルは現在閉鎖され、削除された #6。使用して、一時ディレクトリを作成するには、コンテキストマネージャ tmpdirnameとして一時ファイル()とします: 印刷(「作成された一時的なディレクトリ」、tmpdirname) #のカタログと内容が削除されました
第五に、我々は、関数と変数の使用はお勧めしません。
一時ファイルの履歴を作成すると、最初に使用することですmktemp()
ファイル名を作成するためにこれを使用してファイル名を生成する機能を、と。異なるプロセスは、可能性があるため残念ながら、これは、安全ではないmktemp()
ファイル間の時間がコールを処理するための最初以降の試行で作成されたこの名前のファイルが作成されます。ソリューションは、これらの2つのステップを組み合わせることであると、すぐにファイルを作成します。この方法は、から構成されmkstemp()
、他の機能を使用します。
-
tempfile.
mktemp
(接尾辞= ''、接頭辞= 'TMP'、DIR =なし ) -
バージョン2.3以降では推奨されていません:
mkstemp()
代わりに使用します。ファイルを返すように電話をかけるとき、絶対パス名は存在しません。接頭辞、接尾辞、およびそれらに類似DIRパラメータ
mkstemp()
、バイトのファイル名に加えて、suffix=None
およびprefix=None
サポートされていません。警告
この機能を使用すると、プログラムにセキュリティの脆弱性を導入することができます。ファイル名を使用して起動すると、それはあなたを打つかもしれない他に何も返されます。
mktemp()
使い方は簡単に交換することができNamedTemporaryFile()
渡し、delete=False
パラメータを:>>> f = NamedTemporaryFile(delete=False) >>> f.name '/tmp/tmptjujjt' >>> f.write(b"Hello World!\n") 13 >>> f.close() >>> os.unlink(f.name) >>> os.path.exists(f.name) False