2015-07-28 4 views
0

Предположим у меня есть следующие данные в read.txt:Python - Динамически занесения Переменная

_app1_ip_ 
_app2_ip_ 
_app1_ip_ 
_app3_ip_ 
_app2_ip_ 

И я хочу, чтобы заменить каждый с определенным соответствующим значением (в данном случае, значения в «списке») и вывода, в другой файл (out.txt):

list = ['app1', 'app2', 'app3'] 

for l in list: 
    field = '_%s_ip_' %l 

    patterns = { 
     field : l, 
    } 

    with open("read.txt", "r") as my_input: 
     content = my_input.read() 
    with open("out.txt", "w+") as my_output: 
     for i,j in patterns.iteritems(): 
     content = content.replace(i,j) 
     my_output.write(content) 

То, что я хочу следующее data.txt:

app1 
app2 
app1 
app3 
app2 

То, что я на самом деле получаю, это:

_app1_ip_ 
_app2_ip_ 
_app1_ip_ 
app3 
_app2_ip_ 

Это кажется таким простым .. было бы легким однострочным в bash/sed. Может ли кто-нибудь помочь/объяснить?

ответ

1

После

list = ['app1', 'app2', 'app3'] 
for l in list: 
    field = '_%s_ip_' %l 
    patterns = { 
     field : l, 
    } 

patterns содержит только последнее значение, т.е.

patterns = {'_app3_ip_': 'app3'} 

, потому что вы перезаписать patterns в каждой итерации цикла. Вместо этого вы хотите заполнить этот словарь. Вы можете сделать это с цикл, как вы использовали:

list = ['app1', 'app2', 'app3'] 
patterns = {} 
for l in list: 
    field = '_%s_ip_' % l 
    patterns[field] = l 

или с помощью словаря понимания:

patterns = {'_%s_ip_' % l: l for l in ['app1', 'app2', 'app3']} 
+0

Спасибо за ответ. Тем не менее, я получаю: NameError: name 'patterns' не определяется при использовании pattern [field] = l. И это не нравится синтаксис второго варианта (прерывается в цикле for). – syntax

+0

Я использую python 2.6, если это имеет значение ... – syntax

+0

Хорошо исправлено первое ... просто нужно добавить 'patterns = {}' в начало цикла. Теперь он добавляет замены в нижней части файла, но оставляя некоторые нетронутые наверху ... должно быть проблемой с кодом замены – syntax

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