我有这段代码:
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()
我需要比较这2个临时文件,但我总是得到这样的错误:
WindowsError: [Error 2] : 'c:\\users\\Saul_Tigh\\appdata\\local\\temp\\tmpbkpmeq'
答案 0 :(得分:11)
错误2是找不到文件(ERROR_FILE_NOT_FOUND)。
NamedTemporaryFile
具有delete
参数,默认情况下设置为True
。您确定在tmp_me
方法返回时没有立即删除该文件吗?
您可以尝试使用:
tempfile.NamedTemporaryFile(delete=False)
答案 1 :(得分:8)
让temp_me
返回两个临时文件的列表,而不仅仅是它们的名称(这样它们不会被垃圾收集),并在exit_dialog
中拉出名称。
答案 2 :(得分:4)
您还没有给出完整的回溯,但我几乎可以肯定错误是因为在tmp_me()返回时,临时文件已被删除。返回两个临时创建文件的名称,并在函数返回时销毁名为tmp和tmp_1的对象,并沿其创建的文件进行删除。你得到的只是两个临时文件的名称,现在不再存在,因此在尝试比较它们时会出现错误。
根据tempfile.NamedTemporaryFile的文件:
如果delete为true(默认值),则文件一关闭就会被删除。
将Default默认值设置为False到NameTemporaryFile调用,您应该自己删除文件。或者更好和首选的方法是返回对象而不是它们的名称,并从exit_dialog()方法返回.name s到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()
答案 3 :(得分:2)
这是我收到的完整错误消息
WindowsError: [Error 2] The system cannot find the file specified: 'c:\\users\\imran\\appdata\\local\\temp\\tmpqh7dfp'
这种情况正在发生,因为在tmp_me()
函数返回时对临时文件对象的引用已丢失,并且在变量被垃圾回收时从磁盘中删除了临时文件。
您可以从tmp_me()
返回临时文件对象,但是在使用filecmp.cmp