Найти - Пользователи
Полная версия: python 3 читаем файл и записываем блоками
Начало » Python для новичков » python 3 читаем файл и записываем блоками
1 2 3
Inok
День добрый,
прошу разьяснить как это можно сделать. Есть файл лог, необходимо его разобрать по блокам.
Читаем файл.
Находим строку с “tran = 20664906” и записываем в другой файл данную строку и все строки до ltime_exe = 74049/****, включительно .
Количество строк между этими блоками одинаково 94. При этом необходимо сохранить структуру файла.
что лучше применять read или readlines ?
как задать диопазон строк или ограничители по записи?

Пример файла прикрепил.
Budulianin
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 ?
Прочитай, что эти методы возвращают и сам поймёшь.
Inok
День добрый.
если честно то в python только погружаюсь и знаю мало. читать, обязательно прочитаю.
но если возможно для вашего кода можно комментарии и чем дибильнее, однозначнее и проще тем лучше, не совсем разобрался в наследовании.
в чистом виде мне выдал:
> "Python " temp.py
  File "temp.py", line 12
    fout.write('{\n')
    ^
IndentationError: unexpected indent
Inok
Я решил вот так:

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)

Расскажите как правильнее!
Budulianin
Inok
в чистом виде мне выдал:
Inok
IndentationError: unexpected indent

Скопируй код правильно.
И читай, что тебе интерпретатор пишет.
Inok
в не отредактированном варианте код был

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')
Но все равно спасибо, буду в этом теперь разбираться.

Budulianin
Inok
в не отредактированном варианте код был

Этот код работает точно также
py.user.next
Inok
with open('new 2.txt', 'rb') as fin, \
зачем там 'rb' ?
Budulianin
py.user.next
зачем там ‘rb’ ?

rb универсальнее
py.user.next
Budulianin
rb универсальнее
в задании - работа со строками => нужен текстовый режим
он блоком называет набор строк, то есть это никакого отношения к блочному чтению не имеет
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB