2014-01-22 5 views
5

Я пытаюсь добавить определенные строки в определенную область в моем файле. Я использую это:Добавление строк после определенной строки

new_file = open("file.txt", "r+") 
for line in new_file: 
    if line == "; Include below": 
    line = line + "\nIncluded text" 
    new_file.write(line) 
    else: 
    new_file.write(line) 

Но по какой-то причине содержание моего file.txt дублирует.

Edit: Если мой файл выглядит следующим образом:

blablablablablablabal 
balablablabalablablbla 
include below 
blablablablablabalablab 
ablablablabalbalablaba 

Я хочу, чтобы сделать его выглядеть следующим образом:

blablablablablablabal 
balablablabalablablbla 
include below 
included text 
blablablablablabalablab 
ablablablabalbalablaba 
+0

Я не думаю, что этот вопрос очень ясен. Я предлагаю вам добавить небольшой пример вашего .txt-файла перед обработкой, а затем небольшой пример того, как вы ожидаете, что этот файл будет выглядеть после обработки. Это, вероятно, сделает намного более понятным то, что вы пытаетесь достичь. – Dyrborg

+0

[вы должны переделать новый файл и написать новое содержимое, если хотите использовать только python] (http://stackoverflow.com/questions/125703/how-do-i-modify-a-text-file-in -python) –

+0

@sivatumma, в то время как это было моим твердым убеждением также, очевидно [это не так] (http://stackoverflow.com/a/1325927/3155195) (хотя, конечно, это просто автоматически создает буфер за сцены, как и следовало ожидать) – zehnpaard

ответ

7

Вы не можете безопасно писать в фи le во время чтения, лучше прочитать файл в памяти, обновить его и переписать в файл.

with open("file.txt", "r") as in_file: 
    buf = in_file.readlines() 

with open("file.txt", "w") as out_file: 
    for line in buf: 
     if line == "; Include this text\n": 
      line = line + "Include below\n" 
     out_file.write(line) 
0

Использование sed:

$ sed '/^include below/aincluded text' < file.txt 

Объяснение:

  • /^include below/: соответствует каждой строке, которая начинается (^) с include below
  • a: добавляет новую строку и следующий текст
  • includeed text: текст, который a присоединяет

Edit: Использование Python:

for line in open("file.txt").readlines(): 
    print(line, end="") 
    if line.startswith("include below"): 
     print("included text") 
+0

Как это было бы точно? – user3223818

+0

Точно так же, как вы просили. Попробуй. –

+0

Я имел в виду код ... Я вроде noob =] – user3223818

0

Это то, что я и сделал.

def find_append_to_file(filename, find, insert): 
    """Find and append text in a file.""" 
    with open(filename, 'r+') as file: 
     lines = file.read() 

     index = repr(lines).find(find) - 1 
     if index < 0: 
      raise ValueError("The text was not found in the file!") 

     len_found = len(find) - 1 
     old_lines = lines[index + len_found:] 

     file.seek(index) 
     file.write(insert) 
     file.write(old_lines) 
# end find_append_to_file 
Смежные вопросы