enumerate
行番号を決定するために使用できます。
import sys
exclude = set(map(int, sys.argv[2:]))
with open(sys.argv[1]) as f:
for num,line in enumerate(f, start=1):
if num not in exclude:
sys.stdout.write(line)
start=1
0 から数え始めると削除できます。上記のコードでは、行番号は 1 から始まります。
$ python3 so-linenumber.py so-linenumber.py 2 4 5
import sys
with open(sys.argv[1], 'r') as f:
sys.stdout.write(line)
コンテンツをファイル自体に書き込みたい場合は、sys.stdout ではなく一時ファイルに書き込み、次のように元のファイル名に名前を変更します (またはコマンド ラインでスポンジを使用します)。
import os
import sys
from tempfile import NamedTemporaryFile
exclude = set(map(int, sys.argv[2:]))
with NamedTemporaryFile('w', delete=False) as outf:
with open(sys.argv[1]) as inf:
outf.writelines(line for n,line in enumerate(inf, 1) if n not in exclude)
os.rename(outf.name, sys.argv[1])