web-dev-qa-db-ja.com

Python mkstemp()ファイルに書き込む

私は以下を使用してtmpファイルを作成しています:

from tempfile import mkstemp

私はこのファイルに書き込もうとしています:

tmp_file = mkstemp()
file = open(tmp_file, 'w')
file.write('TEST\n')

確かに私はファイルを閉じて適切に実行しますが、tmpファイルをcatしようとすると、まだ空のままです。基本的に見えますが、なぜ機能しないのかわかりません。説明はありますか?

7
Steeven_b

mkstemp()は、ファイル記述子とパスを含むタプルを返します。問題はあなたが間違った道に書いていることだと思います。 ('(5, "/some/path")'のようなパスに書き込んでいます。)コードは次のようになります。

from tempfile import mkstemp

fd, path = mkstemp()

# use a context manager to open the file at that path and close it again
with open(path, 'w') as f:
    f.write('TEST\n')

# close the file descriptor
os.close(fd)
15
user94559

Smarxによる回答は、pathを指定してファイルを開きます。ただし、代わりにfdを指定する方が簡単です。その場合、コンテキストマネージャはファイル記述子を自動的に閉じます。

from tempfile import mkstemp

fd, path = mkstemp()

# use a context manager to open (and close) file descriptor fd (which points to path)
with open(fd, 'w') as f:
    f.write('TEST\n')

# This causes the file descriptor to be closed automatically
15
Guido van Steen

この例では、Pythonファイル記述子を os.fdopen かっこいいものを書いて、それを閉じます(withコンテキストブロックの最後で)。他のPython以外のプロセスがファイルを使用できます。そして最後に、ファイルが削除されます。

import os
from tempfile import mkstemp

fd, path = mkstemp()

with os.fdopen(fd, 'w') as fp:
    fp.write('cool stuff\n')

# Do something else with the file, e.g.
# os.system('cat ' + path)

# Delete the file
os.unlink(path)
1
Mike T