Python – 如何将“操作系统级别的句柄转换为打开的文件”转换为文件对象?
tempfile.mkstemp()返回:
一个包含操作系统级别句柄的元组,该元组按照该顺序包含一个打开的文件(os.open()返回)和该文件的绝对path名。
如何将该操作系统级句柄转换为文件对象?
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
您可以使用
os.write(tup[0], "foo\n")
写入句柄。
如果你想打开句柄写作,你需要添加“w”模式
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()创build只读文件。 用'w'调用fdopen可能会重新打开它( 可以重新打开由mkstemp创build的文件)。
temp = tempfile.NamedTemporaryFile(delete=False) temp.file.write('foo\n') temp.close()
你的目标是什么? tempfile.TemporaryFile
是否适合您的目的?
我不能评论答案,所以我会在这里发表我的评论:
要创build一个用于写入访问的临时文件,可以使用tempfile.mkstemp并指定“w”作为最后一个参数,如:
f = tempfile.mkstemp("", "", "", "w") # first three params are 'suffix, 'prefix', 'dir'... os.write(f[0], "write something")