使用Python替换文件中的行

使用Python替换文件中的行,python,Python,我想用新行替换文件中的一行(实际上我必须在该行中插入一些内容)。这一行实际上包含AC\u CONFIG\u文件([])我必须根据一些列表添加一些makefile参数,用新行替换这一行。然后我构造了一个新字符串并在文件中进行替换。有什么有效的方法可以做到这一点吗 # 'subdirs' is the list which contains makefile arguments rstring = "AC_CONFIG_FILES([Makefile" for t in subdirs: r

我想用新行替换文件中的一行(实际上我必须在该行中插入一些内容)。这一行实际上包含AC\u CONFIG\u文件([])我必须根据一些列表添加一些makefile参数,用新行替换这一行。然后我构造了一个新字符串并在文件中进行替换。有什么有效的方法可以做到这一点吗

# 'subdirs' is the list which contains makefile arguments
rstring = "AC_CONFIG_FILES([Makefile"
for t in subdirs:
    rstring = rstring+' src/'+t+'/Makefile'
rstring += '])'
print rstring
# 'fname' is the file in which replacement have to be done
#  i is used for indexing in 'insert' function
# 'rline' is the modified line
fname = 'configure.ac'
i = 0
with open(fname,'r') as f:
      modlines=[]
      for line in f.readlines():
          if 'AC_CONFIG_FILES' in line:
                  modlines.insert(i,rstring+'\n')
                  i = i+1
                  continue
          modlines.insert(i,line)
          i = i+1
with open(fname,'w') as out:
      for i in range(len(modlines)):
          out.write(modlines[i])

您可以在不使用循环/计数器变量的情况下执行此操作

modlines = []
with open(fname) as f:
    for line in f:
        if 'AC_CONFIG_FILES' in line:
            modlines.append(rstring + '\n')
        else:
            modlines.append(line)

with open(fname, 'w') as out:
    for line in modlines:
        out.write(line)

您可以在不使用循环/计数器变量的情况下执行此操作

modlines = []
with open(fname) as f:
    for line in f:
        if 'AC_CONFIG_FILES' in line:
            modlines.append(rstring + '\n')
        else:
            modlines.append(line)

with open(fname, 'w') as out:
    for line in modlines:
        out.write(line)

你可以用out.write('''.join(modlines))替换你的第二个
for
。这需要更多的内存。为什么要投反对票?这个解决方案在我看来非常好。否决投票阻止人们回答已经回答了数百次的重复问题。你可以将第二个
for
替换为
out.write(''.join(modlines))
。这会占用更多内存。为什么否决投票?这个解决方案在我看来非常好。否决投票以阻止人们回答已经回答了数百次的重复问题。旁注:您的代码格式可以得到有效改进:我建议您阅读并应用PEP 8。此外,注意不要像用C语言编写的那样用Python编写:Python代码比这个问题中的代码简单;例如,您通常不需要索引(参见Johannes Charra的回答)。旁注:您的代码格式可以得到有效改进:我建议您阅读并应用PEP 8。此外,注意不要像用C语言编写的那样用Python编写:Python代码比这个问题中的代码简单;例如,您通常不需要索引(参见Johannes Charra的答案)。