2013-03-06 4 views
2

У меня есть файл, который содержит 50 строк. Как я могу добавить строку «-----» к определенной строке, например, строке 20, используя python/linux?Как добавить строку в определенную строку

+0

раскол над возвратом каретки (\ n) и циклический переход по всем строкам, увеличивающим var. каждые 20 строк, вставьте любую строку, в которой вы нуждаетесь. вы также можете иметь регулярное выражение с 20 возвратом каретки –

ответ

6

Вы пробовали что-то вроде этого ?:

exp = 20 # the line where text need to be added or exp that calculates it for ex %2 

with open(filename, 'r') as f: 
    lines = f.readlines() 

with open(filename, 'w') as f: 
    for i,line in enumerate(lines): 
     if i == exp: 
      f.write('------') 
     f.write(line) 

Если вам нужно отредактировать дифф количество строк, вы можете обновить код выше таким образом:

def update_file(filename, ln): 
    with open(filename, 'r') as f: 
     lines = f.readlines() 

    with open(filename, 'w') as f: 
     for idx,line in enumerate(lines): 
      (idx in ln and f.write('------')) 
      f.write(line) 
+0

Что такое 'exp'? Я предполагаю, что вы имеете в виду 20. – squiguy

+0

@squiguy yes) Я имею в виду строку, в которой текст должен быть добавлен –

+0

'exp' - это некоторое выражение, которое будет соответствовать тому, что хочет OP. – askewchan

3
$ head -n 20 input.txt > output.txt 
$ echo "---" >> output.txt 
$ tail -n 30 input.txt >> output.txt 
0

Если файл чтение является большим, и вы не хотите сразу читать весь файл в памяти:

from tempfile import mkstemp 
from shutil import move 
from os import remove, close 

line_number = 20 

file_path = "myfile.txt" 

fh_r = open(file_path) 
fh, abs_path = mkstemp() 
fh_w = open(abs_path, 'w') 

for i, line in enumerate(fh_r): 
    if i == line_number - 1: 
     fh_w.write('-----' + line) 
    else: 
     fh_w.write(line) 

fh_r.close() 
close(fh) 
fh_w.close() 

remove(file_path) 
move(abs_path, file_path) 

Примечание: Я использовал ответ Алок here в качестве ссылки.

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