我找到了另一种有效的解决方案,并且无需对文件对象中的行进行所有令人讨厌且不那么优雅的计数即可:
del_line = 3 #line to be deleted: no. 3 (first line is no. 1)
with open("textfile.txt","r") as textobj:
list = list(textobj) #puts all lines in a list
del list[del_line - 1] #delete regarding element
#rewrite the textfile from list contents/elements:
with open("textfile.txt","w") as textobj:
for n in list:
textobj.write(n)
想要的人的详细解释:
(1) 创建一个包含要删除的行号的整数值的变量。假设我想删除第 3 行:
del_line = 3
(2) 打开文本文件并将其放入文件对象中。目前只需要阅读模式。然后,将其内容放入列表中:
with open("textfile.txt","r") as textobj:
list = list(textobj)
(3) 现在每一行都应该是“列表”中的索引元素。您可以继续删除代表您要删除的行的元素:
del list[del_line - 1]
在这一点上,如果你得到线路没有。应该从用户输入中删除,请确保首先将其转换为整数,因为它很可能是字符串格式(如果您使用“input()”)。
它是 del_line - 1,因为列表的元素索引从 0 开始。但是,我假设您(或用户)从“1”开始计数行号。1,在这种情况下,您需要减去 1 才能捕获列表中的正确元素。
(4) 再次打开列表文件,这次是“写模式”,重写整个文件。之后,遍历更新的列表,将“列表”的每个元素重写到文件中。您无需担心新行,因为在您将原始文件的内容放入列表(步骤 2)时,\n 转义也将被复制到列表元素中:
with open("textfile.txt","w") as textobj:
for n in list:
textobj.write(n)
当我希望用户决定在某个文本文件中删除哪一行时,这已经为我完成了这项工作。我认为 Martijn Pieters 的回答确实如此。类似的,但是他的解释对我来说几乎无法分辨。