我找到了另一个高效的解决方案,可以避免对文件对象中的所有行进行不太优雅和麻烦的计数:
del_line = 3
with open("textfile.txt","r") as textobj:
list = list(textobj)
del list[del_line - 1]
with open("textfile.txt","w") as textobj:
for n in list:
textobj.write(n)
对于那些需要详细解释的人:
(1)创建一个包含您想要删除的行号的整数值的变量。假设我想要删除第三行:
del_line = 3
(2) 打开文本文件并将其放入文件对象中。目前只需要读取模式。然后,将其内容放入列表中:
with open("textfile.txt","r") as textobj:
list = list(textobj)
(3) 现在每一行都应该是“list”中的一个索引元素。您可以通过删除表示要删除的行的元素来继续进行:
del list[del_line - 1]
如果你已经得到了需要从用户输入中删除的行号,确保将其转换为整数,因为它很可能会以字符串格式出现(如果您使用了 "input()")。
要减去1是因为列表元素索引从0开始。然而,我假设您(或用户)从第1行开始计数,在这种情况下,您需要减去1才能捕获列表中的正确元素。
(4)再次以“写模式”打开列表文件,重写完整文件。之后,遍历已更新的列表,将“list”的每个元素重新写入文件中。您不必担心换行符,因为在将原始文件的内容放入列表中时(步骤2),\ n转义字符也将复制到列表元素中:
with open("textfile.txt","w") as textobj:
for n in list:
textobj.write(n)
当我想让用户决定在某个文本文件中删除哪一行时,以下代码对我很有用。我认为Martijn Pieters的回答做了类似的事情,但他的解释太少了,我无法理解。