我有这样的代码:
import tempfile
def tmp_me():
tmp = tempfile.NamedTemporaryFile()
tmp1 = tempfile.NamedTemporaryFile()
lst = [tmp.name, tmp1.name]
return lst
def exit_dialog():
lst = tmp_me()
print lst
import filecmp
eq = filecmp.cmp(lst[0],lst[1])
print eq
exit_dialog()我需要比较这两个临时文件,但我总是得到这样的错误:
WindowsError: [Error 2] : 'c:\\users\\Saul_Tigh\\appdata\\local\\temp\\tmpbkpmeq'发布于 2011-04-27 18:39:31
错误2是找不到文件(ERROR_FILE_NOT_FOUND)。
NamedTemporaryFile具有delete参数,该参数在默认情况下设置为True。是否确定该文件不会在tmp_me方法返回时立即删除?
您可以尝试使用:
tempfile.NamedTemporaryFile(delete=False)发布于 2011-04-27 18:47:26
让temp_me返回两个临时文件的列表,而不仅仅是它们的名称(这样它们就不会被垃圾回收),并在exit_dialog中提取这些名称。
发布于 2011-04-27 18:46:43
您还没有给出完整的回溯,但我几乎可以肯定错误是因为在tmp_me()返回时,临时文件已经被删除了。返回两个临时创建的文件的名称,当函数返回时,其名为tmp和tmp_1的对象将被销毁,并删除它们创建的文件。外部得到的只是两个临时文件的名称,这两个临时文件现在已经不存在了,因此在尝试比较它们时会出现错误。
根据tempfile.NamedTemporaryFile的文档
如果delete为true (默认值),则文件一关闭就会被删除。
或者将default作为False传递给您的NameTemporaryFile调用,在该调用中,您应该自己删除文件。或者更好、更可取的方法是返回对象而不是它们的名称,然后从exit_dialog()方法将.name传递给filecmp.cmp
import tempfile
def tmp_me():
tmp1 = tempfile.NamedTemporaryFile()
tmp2 = tempfile.NamedTemporaryFile()
return [tmp1, tmp2]
def exit_dialog():
lst = tmp_me()
print [i.name for i in lst]
import filecmp
eq = filecmp.cmp(lst[0].name,lst[1].name)
print eq
exit_dialog()https://stackoverflow.com/questions/5802684
复制相似问题