Вставьте несколько строк с циклом for в строку, созданную с помощью readlines()

Я пытаюсь вставить несколько строк в строку, созданную с помощью readlines() в python. Я потратил много часов на его отладку, но не могу понять, в чем проблема.

У меня есть количество i серверов, которое определено ранее. «данные» — это строка, которая включает в себя мой текстовый документ, и у меня есть функция «get_line», которая ищет строку по ключевому слову «Queue1 Position» и возвращает строку. В моем примере это строка 82.

...

data = cfg.readlines()

...

#Queue
i = int(gwi["Server"][0]) #Number of Servers
line_idx=get_line(data,'Queue1 Position')
for x in range(1,i+1):
    if x==1:
        data[line_idx] = ('Queue'+str(x)+' Position { 1.500000  '+str(1.100000-x+1)+'  0.000000  m }\n'+'Queue'+str(x)+
        ' Points { {  1.500  '+str(0.700-x+1)+'  0.000  m  }  {  2.500  '+str(0.700-x+1)+'  0.000  m  } }\n\n')
        print(line_idx) #test
    else:
        line_idx = line_idx + 1
        data[line_idx] = ('Queue'+str(x)+' Position { 1.500000  '+str(1.100000-x+1)+'  0.000000  m }\n'+'Queue'+str(x)+
            ' Points { {  1.500  '+str(0.700-x+1)+'  0.000  m  }  {  2.500  '+str(0.700-x+1)+'  0.000  m  } }\n\n')
        print(line_idx) #test

Мой документ, который я редактирую, вначале выглядит так.

Когда я запускаю свой код, cfg-файл выглядит так. «Server1 NextComponent { EntitySink1 }» вырезано.

Но когда я запускаю свой код, результат должен быть таким.

Можно ли вообще решить эту проблему с помощью цикла for? Возможно, есть другое решение.


person M.Buelskaemper    schedule 20.06.2018    source источник
comment
Следует избегать изображений текста, так как они недоступны и не доступны для поиска. Вместо этого отредактируйте вопрос, вставьте текст и отформатируйте его как код, используя кнопку в редакторе или сделав отступ на четыре пробела.   -  person Jason Aller    schedule 06.09.2018


Ответы (1)


Я решил проблему самостоятельно.

#Queue
i = int(gwi["Server"][0]) #Number of Servers
line_idx=get_line(data,'Queue1 Position')
del data[line_idx+1]
queue_text = ""
for x in range(1,i+1):
    if x<i:
        queue_text = queue_text+('Queue'+str(x)+' Position { 1.500000  '+str(1.100000-x+1)+'  0.000000  m }\n'+'Queue'+str(x)+
        ' Points { {  1.500  '+str(0.700-x+1)+'  0.000  m  }  {  2.500  '+str(0.700-x+1)+'  0.000  m  } }\n\n')
    else:
        queue_text = queue_text+('Queue'+str(x)+' Position { 1.500000  '+str(1.100000-x+1)+'  0.000000  m }\n'+'Queue'+str(x)+
        ' Points { {  1.500  '+str(0.700-x+1)+'  0.000  m  }  {  2.500  '+str(0.700-x+1)+'  0.000  m  } }\n')
data[line_idx] = queue_text
person M.Buelskaemper    schedule 21.06.2018