【发布时间】:2010-05-04 21:21:06
【问题描述】:
我有想要在 Python 中擦除的文本文件。我该怎么做?
【问题讨论】:
标签: python
我有想要在 Python 中擦除的文本文件。我该怎么做?
【问题讨论】:
标签: python
在python中:
open('file.txt', 'w').close()
或者,如果您已经打开了文件:
f = open('file.txt', 'r+')
f.truncate(0) # need '0' when using r+
【讨论】:
#include<fstream> 然后 std::ofstream("file.txt"); 与 Python 中的一样短。 :)
f.truncate(0) 之后添加 f.seek(0),否则您将在文件开头附加奇怪的 \x00。
以“写入”模式打开文件会清除它,您不必专门对其进行写入:
open("filename", "w").close()
(您应该关闭它,因为文件自动关闭的时间可能是特定于实现的)
【讨论】:
不是一个完整的答案,更像是对 ondra 答案的扩展
使用truncate()(我的首选方法)时,请确保您的光标位于所需位置。
当打开一个新文件进行读取时 - open('FILE_NAME','r') 它的光标默认为 0。
但是,如果您在代码中解析了文件,请确保再次指向文件的开头,即truncate(0)
默认情况下,truncate() 从当前光标位置开始截断文件的内容。
【讨论】:
truncate() 在光标位置方面的工作有很大帮助。
正如@jamylak 所建议的,包含benefits of context managers 的一个不错的选择是:
with open('filename.txt', 'w'):
pass
【讨论】:
使用with open("myfile.txt", "r+") as my_file: 时,myfile.txt 中出现奇怪的零,尤其是因为我首先读取文件。为了让它工作,我必须首先将my_file 的指针更改为my_file.seek(0) 的文件开头。然后我可以通过my_file.truncate() 清除文件。
【讨论】:
写入和读取文件内容
def writeTempFile(text = None):
filePath = "/temp/file1.txt"
if not text: # If not provided 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
它对我有用
【讨论】:
您必须覆盖该文件。在 C++ 中:
#include <fstream>
std::ofstream("test.txt", std::ios::out).close();
【讨论】:
close() 电话。析构函数将关闭文件。所以你只需要创建一个临时的:ofstream("test.txt");
如果安全性对您很重要,那么打开文件进行写入并再次关闭它是不够的。至少部分信息仍会保存在存储设备上,并且可以通过例如使用磁盘恢复实用程序找到。
例如,假设您要擦除的文件包含生产密码,需要在当前操作完成后立即删除。
使用完文件后将其归零有助于确保敏感信息被销毁。
在最近的一个项目中,我们使用了以下代码,它适用于小文本文件。它用零行覆盖现有内容。
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 Shredder 或 CCleaner 来清除驱动器上的“空白”空间。 p>
【讨论】:
你也可以使用这个(基于上面的几个答案):
file = open('filename.txt', 'w')
file.close()
当然,这是清除文件的一种非常糟糕的方法,因为它需要这么多行代码,但我写这个只是为了向您展示它也可以用这种方法完成。
编码愉快!
【讨论】:
除非您需要擦除结尾,否则您不能就地“擦除”文件。要么满足于覆盖“空”值,要么读取您关心的文件部分并将其写入另一个文件。
【讨论】:
在您的程序中将文件指针分配给 null 只会摆脱对该文件的引用。文件还在。我认为 c stdio.h 中的 remove() 函数是您要在那里寻找的。不确定 Python。
【讨论】:
由于文本文件是连续的,您不能直接擦除其中的数据。您的选择是:
查看seek/truncate 函数/方法来实现上述任何想法。 Python 和 C 都有这些功能。
【讨论】:
os.remove 或os.unlink,或在C 中使用unlink。另一种选择是重新打开文件进行写入或使用truncate。