Pythonは一時ファイルとフォルダを作成します。
問題
プログラム実行時に一時ファイルまたはディレクトリを作成し、使用後に自動的に廃棄することができます。
ソリューション
一般的には、一時ファイルは、システムのデフォルトの位置に
以上はPythonが作成した臨時ファイルとフォルダの詳細です。Pythonの臨時ファイルとフォルダに関する資料は他の関連記事に注目してください。
プログラム実行時に一時ファイルまたはディレクトリを作成し、使用後に自動的に廃棄することができます。
ソリューション
tempfile
モジュールには多くの関数がこのタスクを完了することができます。匿名の一時ファイルを作成するために、tempfile.TemporaryFile
を使用することができる。
from tempfile import TemporaryFile
with TemporaryFile('w+t') as f:
# Read/write to the file
f.write('Hello World
')
f.write('Testing
')
# Seek back to beginning and read the data
f.seek(0)
data = f.read()
# Temporary file is destroyed
或いは、もし気に入ったら、このように臨時ファイルを使ってもいいです。
f = TemporaryFile('w+t')
# Use the temporary file
...
f.close()
# File is destroyed
TemporaryFile()
の最初のパラメータはファイルモードであり、通常はテキストモードはw+t
を使用し、バイナリモードはw+b
を使用する。このモードは、読み取りと書き込みの両方をサポートしています。ここでは、ファイルを閉じてモードを変更すると、ファイルは実際には存在しなくなります。TemporaryFile()
はまた、内蔵のopen()
関数と同じパラメータをサポートします。たとえば:
with TemporaryFile('w+t', encoding='utf-8', errors='ignore') as f:
...
ほとんどのUnixシステムでは、TemporaryFile()
を介して作成されたファイルは匿名であり、ディレクトリさえない。この制限を破るなら、代わりにNamedTemporaryFile()
を使ってもいいです。たとえば:
from tempfile import NamedTemporaryFile
with NamedTemporaryFile('w+t') as f:
print('filename is:', f.name)
...
# File automatically destroyed
ここで、オープンされたファイルのf.name
属性は、一時ファイルのファイル名を含んでいる。ファイル名を他のコードに転送してこのファイルを開く必要がある場合、これは有用です。TemporaryFile()
と同じように、結果としてファイルが閉じられたら自動的に削除されます。そうしたくないなら、キーワードのパラメータを伝えることができます。たとえば:
with NamedTemporaryFile('w+t', delete=False) as f:
print('filename is:', f.name)
...
一時ディレクトリを作成するために、delete=False
を使用することができます。たとえば:
from tempfile import TemporaryDirectory
with TemporaryDirectory() as dirname:
print('dirname is:', dirname)
# Use the directory
...
# Directory and all contents destroyed
討論するtempfile.TemporaryDirectory()
、TemporaryFile()
、NamedTemporaryFile()
の関数は、一時ファイルディレクトリを処理する最も簡単な方法であるべきです。それらはすべての作成と整理ステップを自動的に処理するからです。より低いレベルでは、TemporaryDirectory()
とmkstemp()
を使用して一時ファイルとディレクトリを作成することができます。たとえば:
>>> import tempfile
>>> tempfile.mkstemp()
(3, '/var/folders/7W/7WZl5sfZEF0pljrEB1UMWE+++TI/-Tmp-/tmp7fefhv')
>>> tempfile.mkdtemp()
'/var/folders/7W/7WZl5sfZEF0pljrEB1UMWE+++TI/-Tmp-/tmp5wvcv6'
>>>
しかし、これらの関数はさらに管理されなくなりました。例えば、関数mkdtemp()
は、元のOSファイル記述子を返すだけで、本物のファイルオブジェクトに自分で変換する必要があります。また、これらの書類を自分で整理する必要があります。一般的には、一時ファイルは、システムのデフォルトの位置に
mkstemp()
または同様の場所で作成される。実際の位置を得るためには、/var/tmp
関数が使用されてもよい。たとえば:
>>> tempfile.gettempdir()
'/var/folders/7W/7WZl5sfZEF0pljrEB1UMWE+++TI/-Tmp-'
>>>
すべての一時ファイルに関する関数は、キーワードパラメータtempfile.gettempdir()
、prefix
、suffix
、およびdir
を使用してカタログおよび命名規則をカスタマイズできる。たとえば:
>>> f = NamedTemporaryFile(prefix='mytemp', suffix='.txt', dir='/tmp')
>>> f.name
'/tmp/mytemp8ee899.txt'
>>>
最後にもう一つの点があります。できるだけ安全な方法でtempfile
モジュールを使って仮ファイルを作成します。現在のユーザにのみアクセスを許可し、ファイル作成中に競合条件を回避するための措置を講じることを含む。注意したいのは、異なるプラットフォームは異なるかもしれません。したがって、より多くの詳細を知るために公式文書を読んだほうがいいです。以上はPythonが作成した臨時ファイルとフォルダの詳細です。Pythonの臨時ファイルとフォルダに関する資料は他の関連記事に注目してください。