私は効率的に機能し、ファイルオブジェクト内の行の面倒でエレガントではないすべてのカウントを行わずにうまくいく別のソリューションを見つけました:
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) テキスト ファイルを開き、ファイル オブジェクトに配置します。今のところ、reading-mode だけが必要です。次に、その内容をリストに入れます。
with open("textfile.txt","r") as textobj:
list = list(textobj)
(3) これで、すべての行が「リスト」のインデックス付き要素になります。削除したい行を表す要素を削除することで続行できます。
del list[del_line - 1]
この時点で、行番号を取得した場合。これはユーザー入力から削除されるはずですが、文字列形式になる可能性が高いため、最初に必ず整数に変換してください(「input()」を使用した場合)。
リストの要素インデックスが 0 から始まるため、del_line - 1 です。この場合、リスト内の正しい要素をキャッチするには、1 を差し引く必要があります。
(4) リストファイルを再度開きます。今度は「書き込みモード」で、完全なファイルを書き換えます。その後、更新されたリストを繰り返し処理し、「リスト」のすべての要素をファイルに書き直します。元のファイルの内容をリストに入れる時点 (ステップ 2) で、\n エスケープもリスト要素にコピーされるため、改行について心配する必要はありません。
with open("textfile.txt","w") as textobj:
for n in list:
textobj.write(n)
これは、特定のテキスト ファイルのどの行を削除するかをユーザーに決定してもらいたいときに役に立ちました。Martijn Pieters の答えは sth だと思います。似ていますが、彼の説明は私にはほとんどわかりません。