如何在Python中删除文本文件的文件内容?

时间:2010-05-04 21:21:06

标签: python

我有要在Python中删除的文本文件。我该怎么做?

12 个答案:

答案 0 :(得分:186)

在python中:

open('file.txt', 'w').close()

或者,如果您已经打开了文件:

f = open('file.txt', 'r+')
f.truncate(0) # need '0' when using r+

在C ++中,你可以使用类似的东西。

答案 1 :(得分:22)

对ondra的答案的扩展不是一个完整的答案

使用truncate()(我的首选方法)时,请确保光标位于所需位置。 当打开一个新文件进行读取 - open('FILE_NAME','r')时,它的光标默认为0。 但是如果你在代码中解析了文件,请确保再次指向文件的开头,即truncate(0) 默认情况下,truncate()会截断从当前cusror位置开始的文件内容。

A simple example

答案 2 :(得分:10)

以“写入”模式打开文件会将其清除,您无需特意写入:

open("filename", "w").close()

(你应该关闭它,因为文件自动关闭的时间可能是特定于实现的)

答案 3 :(得分:6)

您必须覆盖该文件。在C ++中:

#include <fstream>

std::ofstream("test.txt", std::ios::out).close();

答案 4 :(得分:6)

来自用户@jamylak的另一种形式open("filename","w").close()

with open('filename.txt','w'): pass

答案 5 :(得分:3)

使用with open("myfile.txt", "r+") as my_file:时,我在myfile.txt中得到奇怪的零,特别是因为我先读取文件。要使其工作,我必须首先使用my_filemy_file.seek(0)的指针更改为文件的开头。然后我可以my_file.truncate()清除文件。

答案 6 :(得分:1)

在程序中将文件指针指定为null只会删除对该文件的引用。该文件仍在那里。我认为c remove()中的stdio.h函数就是你在那里寻找的东西。不确定Python。

答案 7 :(得分:0)

由于文本文件是连续的,因此无法直接删除它们上的数据。您的选择是:

  • 最常见的方法是创建一个新文件。从原始文件中读取并在新文件上写入所有内容,但要删除的部分除外。写完所有文件后,删除旧文件并重命名新文件,使其具有原始名称。
  • 您还可以从要更改的点截断并重写整个文件。寻求你想要改变,并将剩余的文件读取到内存中。回到同一点,截断文件,并在没有要删除的部分的情况下回写内容。
  • 另一个简单的选择是用另一个相同长度的数据覆盖数据。为此,寻找确切位置并写入新数据。限制是它必须具有完全相同的长度。

查看seek / truncate函数/方法以实现上述任何想法。 Python和C都有这些功能。

答案 8 :(得分:0)

除非您需要删除结尾,否则无法从原地“擦除”文件。要么满足于覆盖“空”值,要么阅读您关心的文件部分并将其写入另一个文件。

答案 9 :(得分:0)

如果安全性对您很重要,那么打开文件进行写入并再次关闭它是不够的。至少部分信息仍将存储在存储设备上,例如,可以通过使用光盘恢复实用程序找到。

例如,假设您正在删除的文件包含生产密码,需要在当前操作完成后立即删除。

使用完毕后对文件进行零填充有助于确保敏感信息被破坏。

在最近的一个项目中,我们使用了以下代码,该代码适用于小型文本文件。它用零行覆盖现有内容。

import os

def destroy_password_file(password_filename):
    with open(password_filename) as password_file:
        text = password_file.read()
    lentext = len(text)
    zero_fill_line_length = 40
    zero_fill = ['0' * zero_fill_line_length
                      for _
                      in range(lentext // zero_fill_line_length + 1)]
    zero_fill = os.linesep.join(zero_fill)
    with open(password_filename, 'w') as password_file:
        password_file.write(zero_fill)

请注意,零填充不会保证您的安全。如果您真的担心,最好将零填充使用专家实用程序(如File ShredderCCleaner)来清除您的“空”空间驱动。

答案 10 :(得分:0)

写入和读取文件内容

def writeTempFile(text = ''):
    filePath = "/temp/file1.txt"
    if not text:                      # If blank return file content
        f = open(filePath, "r")
        slug = f.read()
        return slug
    else:
        f = open(filePath, "a") # Create a blank file
        f.seek(0)  # sets  point at the beginning of the file
        f.truncate()  # Clear previous content
        f.write(text) # Write file
        f.close() # Close file
        return text

对我有用

答案 11 :(得分:0)

您也可以使用此方法(基于上述一些答案):

file = open('filename.txt', 'w')
file.write('')
file.close()

当然,这是清除文件的一种非常糟糕的方法,因为它需要很多行代码,但是我只是写了此文件,以向您展示它也可以用此方法完成。

编码愉快!