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")