使用Python同时更新多行

使用Python同时更新多行,python,Python,我在一个大文件中有多行更新,其中一些行是多行的 每次我运行代码时,它只删除第一行,并向其中添加新行。输出如下所示 with open('G1.txt', 'r') as f: lines = f.readlines() with open('G1.txt', 'w') as f: for i,line in enumerate(lines): if i==10: f.write ("in1 G OP RE 1* " + str

我在一个大文件中有多行更新,其中一些行是多行的 每次我运行代码时,它只删除第一行,并向其中添加新行。输出如下所示

with open('G1.txt', 'r') as f:
    lines = f.readlines()

with open('G1.txt', 'w') as f:
    for i,line in enumerate(lines):
        if i==10:
               f.write ("in1  G  OP  RE 1* " + str(g)+ "3500  /"+ '\n')
               f.write ("in2  G  OP  RE 1* " + str(g)+ "3500  /"+ '\n')
        elif i==20:
            f.write(str(t)+ "*31 /"+'\n')
在本例中,您将看到文件中有2 in2。因此,每次我运行代码时,这些行将相互相加。因此,我可能会多出5行,而不是2行

in1  W  OP  RE 1*  19000  3500  /
in2  W  OP  RE 1*  19000  3500  /
in2  W  OP  RE 1*  10000  3500  /
10*31

致以最诚挚的问候

您发布的代码存在多个问题,但您的意思是:

Is there a way to remove the old second line and update it with the new one without repeating `elif i==` for every single line
Because sometime I have to update 7 or ten new lines in the same section and for different sections 
当代码到达第10行时,它会写入您想要的两行,再加上当代码到达旧的第11行时,它不会写出旧的一行

(加上行号中未提及的所有行将写回文件)

更新:

with open('G1.txt', 'r') as f:
    lines = f.readlines()

with open('G1.txt', 'w') as f:
    for i,line in enumerate(lines):
        if i == 10:
            f.write( ...
            f.write( ...
        elif i == 11:
            pass
        # etc etc


        else:
            f.write(line)
上述代码(使用Thonny和Py3.6测试)转换原始文件:

with open('G1.txt', 'r') as f:
    lines = f.readlines()

with open('G1.txt', 'w') as f:
    for i,line in enumerate(lines):
        if i == 2:
            f.write('New line 3\n')
            f.write('New line 4\n')
        elif i == 3:
            pass
        # etc etc


        else:
            f.write(line)
进入新文件:

line 1
line 2
line 3
line 4
line 5
line 6

重复运行总是使文件处于第二种状态

对于初学者,如果您有一个大文件,请不要使用
readlines()
将其全部加载到内存中,这样您就可以循环使用它。其次,你的问题并不清楚实际问题是什么。“其中一些行是多行的”你能解释一下这意味着什么吗?写一个通用循环,通过索引和列表中的新内容?什么是
g
t
,和
w
?为什么你在这些行上循环,但对
数据却什么也不做?你没有更新行-你一直在写新行,但你从来没有考虑到你读过的行。谢谢你的回答,但它没有删除第二行,这意味着我不理解你的评论。我的答案中的代码将用两行替换第10行,用无行替换第11行。in1 W OP RE 1*19000 3500/in2 W OP RE 1*19000 3500/in2 W OP RE 1*10000 3500/我得到的错误与我之前得到的错误相同。它没有删除第二行非常感谢您的回答,但是你考虑过同时更新其他6行吗。重复传球6次,效率不高。必须有一种方法可以在不使用elif+pass 6次的情况下同时更新它们
line 1
line 2
New line 3
New line 4
line 5
line 6