<p>我找到了另一个有效的解决方案,它不需要对文件对象中的行进行令人讨厌的、不那么优雅的计数:</p>
<pre><code>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)
</code></pre>
<p>对想要的人的详细解释:</p>
<p>(1)创建包含要删除的行号整数值的变量。假设我要删除第3行:</p>
<pre><code>del_line = 3
</code></pre>
<p>(2)打开文本文件并将其放入文件对象中。现在只需要阅读模式。然后,将其内容放入列表中:</p>
<pre><code>with open("textfile.txt","r") as textobj:
list = list(textobj)
</code></pre>
<p>(3)现在每一行都应该是“list”中的索引元素。可以通过删除表示要删除的行的元素来继续:</p>
<pre><code>del list[del_line - 1]
</code></pre>
<p>在这一点上,如果您得到了应该从用户输入中删除的行号,请确保首先将其转换为整数,因为它很可能是字符串格式(如果您使用“input()”)。</p>
<p>这是del_line-1,因为列表的元素索引从0开始。但是,我假设您(或用户)开始在第1行的“1”处计数,在这种情况下,您需要扣除1以获取列表中的正确元素。</p>
<p>(4)再次打开列表文件,这次以“写入模式”,重写完整的文件。之后,遍历更新的列表,将“list”的每个元素重写到文件中。您不必担心新行,因为在将原始文件的内容放入列表时(步骤2),转义符也将复制到列表元素中:</p>
<pre><code>with open("textfile.txt","w") as textobj:
for n in list:
textobj.write(n)
</code></pre>
<p>当我想让用户决定删除某个文本文件中的哪一行时,这就完成了我的工作。
我认为马蒂金·皮特斯的回答也有相似之处,不过他的解释对我来说是微不足道的。</p>