Python-“ OSレベルのハンドルを開いているファイルに変換する方法”ファイルオブジェクトに?
-
03-07-2019 - |
質問
tempfile.mkstemp()は以下を返します:
開いているファイル(os.open()から返される)へのOSレベルのハンドルと、そのファイルの絶対パス名をこの順序で含むタプル。
OSレベルのハンドルをファイルオブジェクトに変換するにはどうすればよいですか
ファイル記述子を"ファイルにラップするには オブジェクト"、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
解決
使用できます
os.write(tup[0], "foo\n")
ハンドルに書き込む。
書き込み用のハンドルを開きたい場合は、&quot; w&quot; モードを追加する必要があります
f = os.fdopen(tup[0], "w")
f.write("foo")
他のヒント
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')
fdopen()でオープンモード( 'w')を指定するのを忘れました。デフォルトは 'r'で、write()呼び出しが失敗します。
mkstemp()は読み取り専用のファイルを作成すると思います。 fdopenを 'w'で呼び出すと、おそらく書き込みのために再び開きます(mkstempによって作成されたファイルを再度開くことができます)。
temp = tempfile.NamedTemporaryFile(delete=False)
temp.file.write('foo\n')
temp.close()
ここでの目標は何ですか? tempfile.TemporaryFile
はあなたの目的には不適切ですか?
答えにコメントできないので、ここにコメントを投稿します:
書き込みアクセス用の一時ファイルを作成するには、tempfile.mkstempを使用して&quot; w&quot;を指定します。次のような最後のパラメータとして:
f = tempfile.mkstemp("", "", "", "w") # first three params are 'suffix, 'prefix', 'dir'...
os.write(f[0], "write something")
所属していません StackOverflow