57

tempfile.mkstemp() の戻り値:

開いているファイルへの OS レベルのハンドル (os.open() によって返される) とそのファイルの絶対パス名をこの順序で含むタプル。

その OS レベルのハンドルをファイル オブジェクトに変換するにはどうすればよいですか?

os.open()のドキュメントには次のように記載されています。

ファイル記述子を「ファイル オブジェクト」にラップするには、fdopen() を使用します。

だから私は試しました:

>>> import tempfile
>>> tup = tempfile.mkstemp()
>>> import os
>>> f = os.fdopen(tup[0])
>>> f.write('foo\n')
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
IOError: [Errno 9] Bad file descriptor
4

6 に答える 6

57

使用できます

os.write(tup[0], "foo\n")

ハンドルに書き込みます。

書き込み用にハンドルを開きたい場合は、「w」モードを追加する必要があります

f = os.fdopen(tup[0], "w")
f.write("foo")
于 2008-10-03T19:47:17.260 に答える
13

with ステートメントを使用してそれを行う方法は次のとおりです。

from __future__ import with_statement
from contextlib import closing
fd, filepath = tempfile.mkstemp()
with closing(os.fdopen(fd, 'w')) as tf:
    tf.write('foo\n')
于 2009-08-18T19:44:31.530 に答える
7

fdopen() でオープン モード ('w') を指定するのを忘れました。デフォルトは「r」で、write() 呼び出しが失敗します。

mkstemp() は読み取り専用のファイルを作成すると思います。'w' を指定して fdopen を呼び出すと、おそらく書き込み用にファイルが開かれます ( mkstemp によって作成されたファイルを再度開くことができます)。

于 2008-10-03T20:00:14.613 に答える
4
temp = tempfile.NamedTemporaryFile(delete=False)
temp.file.write('foo\n')
temp.close()
于 2010-03-10T03:33:07.397 に答える
2

ここであなたの目標は何ですか?tempfile.TemporaryFileあなたの目的には不適切ですか?

于 2008-10-03T20:19:54.730 に答える
0

回答についてコメントすることはできないので、ここにコメントを投稿します。

書き込みアクセス用の一時ファイルを作成するには、次のように tempfile.mkstemp を使用し、最後のパラメーターとして「w」を指定します。

f = tempfile.mkstemp("", "", "", "w") # first three params are 'suffix, 'prefix', 'dir'...
os.write(f[0], "write something")
于 2013-06-05T14:15:44.287 に答える