Форум сайта python.su
-1
День добрый,
прошу разьяснить как это можно сделать. Есть файл лог, необходимо его разобрать по блокам.
Читаем файл.
Находим строку с “tran = 20664906” и записываем в другой файл данную строку и все строки до ltime_exe = 74049/****, включительно .
Количество строк между этими блоками одинаково 94. При этом необходимо сохранить структуру файла.
что лучше применять read или readlines ?
как задать диопазон строк или ограничители по записи?
Пример файла прикрепил.
Прикреплённый файлы:
new 2.txt (3,7 KБ)
Офлайн
33
Inok
прошу разьяснить как это можно сделать.
from itertools import takewhile start = 'tran = 20664906' stop = 'ltime_exe = 74049' with open('new 2.txt', 'rb') as fin, \ open('output_new2.txt', 'w') as fout: for line in fin: if start in line: fout.write('tran\n') fout.write('{\n') for line in takewhile(lambda x: stop not in x, fin): fout.write(line) fout.write(' }\n') fout.write('}\n')
InokПрочитай, что эти методы возвращают и сам поймёшь.
что лучше применять read или readlines ?
Отредактировано Budulianin (Ноя. 30, 2013 11:32:30)
Офлайн
-1
День добрый.
если честно то в python только погружаюсь и знаю мало. читать, обязательно прочитаю.
но если возможно для вашего кода можно комментарии и чем дибильнее, однозначнее и проще тем лучше, не совсем разобрался в наследовании.
в чистом виде мне выдал:
> "Python " temp.py File "temp.py", line 12 fout.write('{\n') ^ IndentationError: unexpected indent
Офлайн
-1
Я решил вот так:
p3 = open( p2[0], 'r').readlines() a = named_params['fntran'] p4 = p3.index (' tran = '+a+'\n') with open (a+ '_' + named_params['fnschet']+'.txt','w',encoding= 'utf-8') as fi: print (''.join (p3[p4-2 : p4+94]) , file=fi)
Офлайн
33
Inok
в чистом виде мне выдал:
Inok
IndentationError: unexpected indent
Офлайн
-1
в не отредактированном варианте код был

num_tran = '20664906' with open('new 2.txt', 'rb') as fin, \ open('output_new2.txt', 'w') as fout: for line in fin: if num_tran in line: fout.write('tran\n') fout.write('{\n') while 'ltime_exe = 74049' not in line : fout.write(line) line = next(fin) fout.write(' }\n') fout.write('}\n')
Офлайн
33
Inok
в не отредактированном варианте код был
Офлайн
857
Inokзачем там 'rb' ?with open('new 2.txt', 'rb') as fin, \
Офлайн
33
py.user.next
зачем там ‘rb’ ?
Офлайн
857
Budulianinв задании - работа со строками => нужен текстовый режим
rb универсальнее
Офлайн