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

Hic*_*ick 104 python

我有文本文件,我想在Python中擦除.我怎么做?

ond*_*dra 225

在python中:

open('file.txt', 'w').close()
Run Code Online (Sandbox Code Playgroud)

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

f = open('file.txt', 'r+')
f.truncate(0) # need '0' when using r+
Run Code Online (Sandbox Code Playgroud)

在C++中,您可以使用类似的东西.

  • "如果您已经打开过文件",则为+1 (13认同)
  • 我正在阅读以及写入文件。答案完美地截断了文件,但是要注意,如果你想再次向其中写入内容,请不要忘记在“f.truncate(0)”之后添加“f.seek(0)”,否则你会附加奇怪的 \x00在文件的开头。 (12认同)
  • 它的工作原理(在C++和python中)是因为默认情况下,当您打开文件进行写入时,它会截断现有内容.所以它确实是一种副作用,因此出于清晰的原因我更喜欢显式调用truncate(),即使它是不必要的. (7认同)
  • 如果你使用"r +"打开文件,如果你有解析文件,请使用truncate(0).将其添加到上面的答案中以完成它! (7认同)
  • 使用f.seek(0)将指针移动到文件的开头 (3认同)

Sni*_*tra 24

对ondra的答案的延伸不完全是一个完整的答案

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

一个简单的例子


Dou*_*der 13

以"写入"模式打开文件会清除它,您没有特别要写入它:

open("filename", "w").close()
Run Code Online (Sandbox Code Playgroud)

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


wcy*_*cyn 12

使用 时with open("myfile.txt", "r+") as my_file:,我在 中得到奇怪的零myfile.txt,尤其是因为我是先读取文件。为了让它工作,我必须首先my_filemy_file.seek(0). 然后我可以my_file.truncate()清除文件。

  • 这应该不足为奇,3年前的[这个答案](/sf/answers/1461595131/)中就提到过。 (2认同)

Ale*_*ban 6

你必须覆盖该文件.在C++中:

#include <fstream>

std::ofstream("test.txt", std::ios::out).close();
Run Code Online (Sandbox Code Playgroud)


小智 6

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

with open('filename.txt','w'): pass
Run Code Online (Sandbox Code Playgroud)


Nic*_*ick 5

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

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

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

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

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)
Run Code Online (Sandbox Code Playgroud)

请注意,零填充并不能保证您的安全。如果您真的很担心,最好进行零填充使用专业实用程序(例如文件粉碎机CCleaner)来擦除驱动器上的“空白”空间。