如何只删除python中的文件内容

时间:2013-06-15 17:15:34

标签: python file-io seek

我有一个包含一些内容的临时文件和一个生成此文件的输出的python脚本。我想要重复N次,所以我需要重用该文件(实际上是文件数组)。我正在删除整个内容,因此临时文件将在下一个周期中为空。要删除内容,请使用以下代码:

def deleteContent(pfile):

    pfile.seek(0)
    pfile.truncate()
    pfile.seek(0) # I believe this seek is redundant

    return pfile

tempFile=deleteContent(tempFile)

我的问题是:是否还有其他(更好,更短或更安全)的方法来删除整个内容而不实际从磁盘中删除临时文件?

tempFile.truncateAll()

之类的东西

4 个答案:

答案 0 :(得分:68)

  

如何仅删除python中文件的内容

有几种方法可以将文件的逻辑大小设置为0,具体取决于您访问该文件的方式:

清空打开的文件:

def deleteContent(pfile):
    pfile.seek(0)
    pfile.truncate()

清空文件描述符已知的打开文件:

def deleteContent(fd):
    os.ftruncate(fd, 0)
    os.lseek(fd, 0, os.SEEK_SET)

清空已关闭的文件(名称已知)

def deleteContent(fName):
    with open(fName, "w"):
        pass

<小时/> <小时/>

  

我有一个临时文件包含一些内容[...]我需要重复使用该文件

话虽如此,在一般情况中,重用临时文件可能效率不高,也不可取。除非您有非常具体的需求,否则您应该考虑使用tempfile.TemporaryFile上下文管理器来几乎透明地创建/使用/删除您的临时文件:

import tempfile

with tempfile.TemporaryFile() as temp:
     # do whatever you want with `temp`

# <- `tempfile` guarantees the file being both closed *and* deleted
#     on exit of the context manager

答案 1 :(得分:3)

我认为最简单的方法是在写入模式下打开文件然后关闭它。例如,如果您的文件myfile.dat包含:

"This is the original content"

然后你可以简单地写:

f = open('myfile.dat', 'w')
f.close()

这将删除所有内容。然后,您可以将新内容写入文件:

f = open('myfile.dat', 'w')
f.write('This is the new content!')
f.close()

答案 2 :(得分:2)

比这样的事情更容易:

import tempfile

for i in range(400):
    with tempfile.TemporaryFile() as tf:
        for j in range(1000):
            tf.write('Line {} of file {}'.format(j,i))

创建400个临时文件,并为每个临时文件写入1000行。它在不起眼的机器上执行不到1/2秒。在上下文管理器打开和关闭的情况下,将创建和删除总计的每个临时文件。它是快速,安全和跨平台的。

使用tempfile比尝试重新发明要好得多。

答案 3 :(得分:2)

你可以这样做:

def deleteContent(pfile):
    fn=pfile.name 
    pfile.close()
    return open(fn,'w')