虽然程序经常被用来创建文件,但有时程序员也需要清除文件数据。幸运的是,有多种方法可以清除文件中的文本。在这篇文章中,我们将用一些简单的例子来演示如何用Python清除一个文本文件。
通过利用Python的一些标准工具,我们可以打开、读取和清除文本文件。我们还将学习如何使用片断符号从一个文本文件中删除特定的行。
Python 简化了文件处理的过程,从而使程序更加简洁。学习本指南的结果是,你将理解 Python 如何清除文本文件和删除数据行。
在写模式下使用 open() 函数清除一个文本文件
以写模式打开一个文件将自动删除文件的内容。open() 函数需要两个参数,我们想打开的文本文件和我们要打开的模式。
在写模式下打开一个文件会清除其数据。另外,如果指定的文件不存在,Python 将创建一个新的文件。删除一个文件的最简单方法是使用 open() 并在写模式下把它赋值给一个新的变量。
file_to_delete = open("info.txt",'w')
file_to_delete.close()
Python的 with 语句简化了异常处理。使用with在写模式下打开一个文件也会清除它的数据。一个传递语句完成了这个例子。
# clear the data in the info file
with open("info.txt",'w') as file:
pass
如何用 truncate() 方法清除一个文件
truncate()方法减少了文件的大小。这个方法需要一个可选的参数来设置文件的新大小。如果没有提供参数,文件将保持不变。
试图将一个文件截断到比它原来的大小长,可能会产生意想不到的结果。例如,如果截断的大小超过了原始文件的大小,程序可能会在文件的末尾添加白色空间。
我们将使用一个演示文本文件来测试 Python 截断文件的能力。
info.txt
Guido van Rossum 在 1991 年创建了 Python。
Python 是一种通用的编程语言。
Python的优势之一是可读性。
with open("info.txt",'r+') as file:
file.truncate(16)
# read the file’s contents
with open("info.txt", 'r') as file:
lines = file.readlines()
for line in lines:
print(line)
输出
Guido van Rossum
在上面的例子中,truncate()方法将文件缩减为前16个字符的文本。注意我们是以读和写两种模式打开文件的。这对于截断方法的工作来说是必要的。
通过给 truncate() 方法传递一个0 的值,可以完全清除文本文件。
with open("example.txt",'r+') as file:
file.truncate(0)
上面的 Python 代码将清除一个文本文件的内容。以这种方式使用truncate()方法将把文件的大小减少到0,删除文件中的任何内容。
使用Python列表切片清除一个文本文件
使用 Python 切片符号,可以检索一个列表、字符串或元组的子集。使用这一 Python 特性,我们可以定义一个给定子集的开始和结束索引。
切片符号法使用一种特殊的语法来寻找一个数值范围的子集。下面的例子显示了切片符号法是如何工作的。通过定义分片的开始、结束和步骤,我们将得到原始列表的一个子集。
nums = [1,2,3,4,5,6,7,8,9]
sub = nums[1:8:2]
print(sub)
输出
[2, 4, 6, 8]
接下来,我们将使用上一节中的info.txt文档来演示如何使用切片符号来清除文本文件中的行。readlines()方法将返回一个文档中的文本行数列表。
在提取了这些行之后,我们可以使用切片符号来创建一个新的列表,我们将用它来覆盖旧文件。只有第一行文本将被保留。其他的将被从文本文件中清除掉。
# read the file's contents
read_file = open("info.txt",'r')
lines = read_file.readlines()
read_file.close()
write_file = open("info.txt",'w')
# slice the file's content
lines = lines[:1]
for line in lines:
write_file.write(line)
print(line)
write_file.close()
输出
Guido van Rossum created Python in 1991.
如何从一个文本文件中删除特定的行
使用一些常见的 Python 函数,我们也可以从文本文件中清除特定的数据行。如果我们提前知道我们要删除哪些行,那就特别有帮助。在这种情况下,我们可以使用片断符号来检索文件的一个子集。
通过在文件上写入其数据的子集,我们可以删除文本行。下面的例子使用了美国作家兰斯顿-休斯(Langston Hughes)的诗歌 "Dream Deferred "中的一段节选。
dream.txt
梦想被推迟会怎样?
它是否会像阳光下的葡萄干一样干枯
?
清除文本文件的第一行
为了清除一个文件中的第一行文本,我们需要使用一些 Python 的文件处理方法。首先,我们将使用readlines() 来获得一个文件的文本数据的列表。通过seek() 方法,我们可以手动调整文件指针的位置。
第二,我们可以使用truncate() 方法来调整文件的大小。第三,我们要向文件写入一个新的行数列表。使用slice符号,可以省略原始文件的第一行。
with open("dream.txt",'r+') as file:
# read the lines
lines = file.readlines()
# move to the top of the file
file.seek(0)
file.truncate()
file.writelines(lines[1:])
with open("dream.txt",'r') as file:
lines = file.readlines()
for line in lines:
print(line)
输出
Does it dry up
Like a raisin in the sun?
清除文本文件中的多行
从一个文件中删除多行文本也是可能的。使用切片符号,我们可以创建我们想要的任何数据子集。使用这种覆盖原始文件的方法,我们可以有效地清除文件中任何不需要的数据。
通过改变分片的开始和结束索引,我们会得到dream.txt文件的不同子集。也可以将切片的列表结合起来。在创建列表的子集时,使用这些工具提供了大量的通用性。
with open("dream.txt",'r+') as file:
# read the lines
lines = file.readlines()
# move to the top of the file
file.seek(0)
file.truncate()
file.writelines(lines[:3])
with open("dream.txt",'r') as file:
lines = file.readlines()
for line in lines:
print(line)
输出
What happens to a dream deferred?
如何用一个字符串清除一个文本文件
如果我们想从一个包含某个单词、短语或数字的字符串中删除一行怎么办?我们可以使用 Python 的if语句来检查每一行的字符串数据。如果我们要找的字符串在这一行中,我们可以避免把它包括在输出文件中。
employee.txt
姓名。Jamie Jameson
年龄:37岁
职业:文案策划。文案策划人
开始日期。2019年4月3日
在这个例子中,我们需要将文件打开三次。首先,我们将打开该文件,提取其内容。接下来,我们将把数据写入一个新文件,清除我们不需要的行。最后,我们需要打开文件并读取它,以证明文件的处理是正确的。
data_file = open("employee.txt",'r')
lines = data_file.readlines()
data_file.close()
write_file = open("employee.txt",'w')
for line in lines:
if "Age" not in line:
write_file.write(line)
write_file.close()
read_file = open("employee.txt",'r')
lines = read_file.readlines()
read_file.close()
for line in lines:
print(line)
输出
Name: James Jameson
Occupation: Copywriter
Starting Date: April 3, 2019
总结
在这篇文章中,我们深入研究了如何在 Python 中清除文本文件。我们看到 Python 语言为完成这项任务提供了许多选择。使用每个Python安装中的一些标准方法和函数,我们能够清除整个文件,以及从文件中删除特定的行。
虽然像切分符号这样的工具对于清除文本文件是很好的,但它们在其他领域也很有用。这样,你学习的Python的每一个新功能都会提高你的整体编码能力。