首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python临时文件

python临时文件
EN

Stack Overflow用户
提问于 2011-04-27 18:33:37
回答 4查看 8.2K关注 0票数 5

我有这样的代码:

代码语言:javascript
复制
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()

我需要比较这两个临时文件,但我总是得到这样的错误:

代码语言:javascript
复制
WindowsError: [Error 2] : 'c:\\users\\Saul_Tigh\\appdata\\local\\temp\\tmpbkpmeq'
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-27 18:39:31

错误2是找不到文件(ERROR_FILE_NOT_FOUND)。

NamedTemporaryFile具有delete参数,该参数在默认情况下设置为True。是否确定该文件不会在tmp_me方法返回时立即删除?

您可以尝试使用:

代码语言:javascript
复制
tempfile.NamedTemporaryFile(delete=False)
票数 12
EN

Stack Overflow用户

发布于 2011-04-27 18:47:26

temp_me返回两个临时文件的列表,而不仅仅是它们的名称(这样它们就不会被垃圾回收),并在exit_dialog中提取这些名称。

票数 8
EN

Stack Overflow用户

发布于 2011-04-27 18:46:43

您还没有给出完整的回溯,但我几乎可以肯定错误是因为在tmp_me()返回时,临时文件已经被删除了。返回两个临时创建的文件的名称,当函数返回时,其名为tmp和tmp_1的对象将被销毁,并删除它们创建的文件。外部得到的只是两个临时文件的名称,这两个临时文件现在已经不存在了,因此在尝试比较它们时会出现错误。

根据tempfile.NamedTemporaryFile的文档

如果delete为true (默认值),则文件一关闭就会被删除。

或者将default作为False传递给您的NameTemporaryFile调用,在该调用中,您应该自己删除文件。或者更好、更可取的方法是返回对象而不是它们的名称,然后从exit_dialog()方法将.name传递给filecmp.cmp

代码语言:javascript
复制
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()
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5802684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档