python tempfile读写

时间:2019-02-01 12:13:41

标签: python python-3.x file temporary-files

我有读出和写入到一个临时文件的问题:

import tempfile

def edit(base):
    tmp = tempfile.NamedTemporaryFile(mode='w+')
    #fname = tmp.name
    tmp.write(base)
    #system('nano %s' % fname)
    content = tmp.readlines()
    tmp.close()
    return content

answer = "hi"
print(edit(answer))

输出为[],而不是["hi"] 我不知道背后的原因,

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

临时文件仍然是文件;它们具有指向文件中当前位置的“指针”。对于新写入的文件,指针位于最后一次写入的末尾,因此,如果您write没有进行seek存取,则将从文件末尾读取内容,但不会得到任何结果。只需添加:

tmp.seek(0)

write之后,您将选择在下一个read / readlines中写的内容。

如果目标仅仅是使数据对其他人可见,请按名称打开文件,例如在注释掉的代码中使用外部程序(例如nano),可以跳过seek,但是您需要确保将数据从缓冲区刷新到磁盘,因此要在{{ 1}},您将添加:

write

答案 1 :(得分:0)

您因为游标的位置是错的。 当您写入文件时,光标将停在文本的最后。然后,你正在阅读这意味着什么。因为光标读取数据是在其位置之后。要进行快速修复,代码必须如下所示:

import tempfile

def edit(base):
    tmp = tempfile.NamedTemporaryFile(mode='w+')
    #fname = tmp.name
    tmp.write(base)
    tmp.seek(0, 0)  # This will rewind the cursor
    #system('nano %s' % fname)
    content = tmp.readlines()
    tmp.close()
    return content

answer = "hi"
print(edit(answer))

您可能需要阅读有关的文档。 https://docs.python.org/3/tutorial/inputoutput.html?highlight=seek#methods-of-file-objects