python临时文件

时间:2011-04-27 10:33:37

标签: python temporary-files

我有这段代码:

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'

4 个答案:

答案 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

进行测试之前,您必须先关闭文件