【发布时间】:2018-04-03 21:23:11
【问题描述】:
mkstemp()返回一个元组,其中包含打开文件的操作系统级句柄(os.open()将返回)和该文件的绝对路径名,按此顺序。
但是,从这些 shell 命令来看,元组的第一个成员似乎是一个整数,而不是文件句柄:
>>> temp = tempfile.mkstemp(suffix='.html')
>>> temp
(17, '/var/folders/dc/nv4yxcrd0zqd2dtxlj281b740000gn/T/tmpktmb2gjg.html')
>>> type(temp[0])
int
我必须使用open(temp[1]) 来获取文件句柄吗?为什么不返回文件句柄?
【问题讨论】:
-
如果你想要一个真正的类似文件的 object,而不是文件 handle(又名文件 descriptor,一个普通的
int),使用更高级别的类,liketempfile.NamedTemporaryFile。这将为您提供一个打开的文件对象,并且该对象的.name属性将提供名称。奖励:关闭时,临时文件会自动为您删除(或者如果您想保留它,您可以使用delete=False构建;是否删除它取决于您)。NamedTemporaryFile是根据mkstemp实现的,所以同样安全。