web-dev-qa-db-ja.com

tempfile.NamedTemporaryFile()の使用方法は?

私はPythonスクリプトを作成しています。このスクリプトは、スクリプトの実行中に頻繁に追加され、最後にマージされる約50の個別の一時ファイルを作成する必要があります。 tempfileモジュールは必要なことを実行できますが、ドキュメントを読む方法を理解できませんでした。

スクリプトが何万もの他のファイルを処理するときにこれらのデータチャンクが大きくなるため、変数ではなく一時ファイルを使用してシステムメモリを節約したいと思います。

次のコードチャンクは、一時的なディレクトリにこれらのファイルを(一時的に)作成するために現在使用しているハックです。

_item = (string from another file)   # string must id file for future use
tmpfile = 'tmpfiles/' + item
if item not in totalitems:
   totalitems.add(item)
   with open(tmpfile, 'w') as itemfile:
      output = some stuff
      tmpfile.write(output)
else:
   with open(tmpfile, 'a') as itemfile:
      output = different stuff
      tmpfile.write(output)
_

私が必要なのはtempfile.NamedTemporaryFile()だと思います。 ドキュメント によると:

その名前は、ファイルオブジェクトの名前メンバーから取得できます。

残念ながら、それが何を意味するのか理解できません。処理中のファイルで対応する「アイテム」に再び出会ったときに、各ファイルを再度呼び出すことができるようにする必要があります。これはかなり単純で、私はただ密集していると思います。重要な場合、Python 2.7.1と3.2.3の両方に対応するこのスクリプトのバージョンがあります。どちらか一方が動作する必要があるだけです。両方を学習として作成しました。運動。

33
Gregory

「その名前は、ファイルオブジェクトの名前メンバーから取得できます。」

次のように作成された一時ファイルの名前を取得できることを意味します。

In [4]: import tempfile

In [5]: tf = tempfile.NamedTemporaryFile()  
In [6]: tf.name  # retrieve the name of the temp file just created
Out[6]: 'c:\\blabla\\locals~1\\temp\\tmptecp3i'

:デフォルトでは、ファイルは閉じられると削除されます。ただし、deleteパラメーターがFalseの場合、ファイルは自動的に削除されません。詳細については、これに関する Pythonドキュメント を参照してください。

作成する50の一時ファイルのそれぞれの名前を取得できるため、後で(言うように)使用する前に、リストなどに保存することができます。 deleteの値を適切に設定して、ファイルを閉じたときにファイルが消えないようにしてください(閉じて、後で再び開く場合)。

ここで一時ファイル名を作成する方法について詳しく説明しました Pythonでランダムなファイル名を生成する最良の方法

40
Levon