2013-09-17 2 views
-1

Я хочу заменить строку в моем файле новой строкой (на самом деле мне нужно вставить некоторое содержимое в строку). Фактически строка содержит AC_CONFIG_FILES ([]) Мне нужно заменить эту строку новой строкой, добавив некоторые аргументы makefile на основе некоторого списка. Затем я построил новую строку и сделал замену в файле. Есть ли эффективный способ сделать это?Замена строки в файле с помощью Python

# '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]) 
+0

Side Примечание: код форматирования было бы полезно улучшить: Я полагаю, что вы читали и применять PEP 8. Кроме того, будьте осторожны, чтобы не писать в Python, как и в C: код Python проще, чем код в этом вопросе; например, вам часто не нужны индексы (см. ответ Йоханнеса Чарры). – EOL

ответ

3

Вы могли бы сделать это без цикла/переменных счетчика

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) 
+0

Вы можете заменить свой второй 'for'' out.write (''. Join (modlines)) '. – ilent2

+1

Это занимает гораздо больше памяти. – simonzack

+2

Почему голос? Это решение выглядит очень хорошо для меня. – EOL

Смежные вопросы