我正在尝试以
之类的方式从 python 中的文件中删除特定的行号./foo.py 文件名.txt 4 5 2919
其中 4 5 和 2919 是行号
我想做的是:
for i in range(len(sys.argv)):
if i>1: # Avoiding sys.argv[0,1]
newlist.append(int(sys.argv[i]))
然后:
count=0
generic_loop{
bar=file.readline()
count+=1
if not count in newlist:
print bar
}
它打印原始文件中的所有行(中间有空格)
最佳答案
您可以使用 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)
如果您从 0 开始计数,您可以删除 start=1
。在上面的代码中,行号从 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)
如果要将内容写入文件本身,请将其写入 temporary file而不是 sys.stdout,然后是 rename原始文件名(或在命令行上使用 sponge),如下所示:
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])
关于python 从文件中删除 "many"行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16391091/