Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 29, 2013 15:34:16

Inok
Зарегистрирован: 2013-09-11
Сообщения: 41
Репутация: +  -1  -
Профиль   Отправить e-mail  

python 3 читаем файл и записываем блоками

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

Пример файла прикрепил.

Прикреплённый файлы:
attachment new 2.txt (3,7 KБ)

Офлайн

#2 Ноя. 30, 2013 11:00:46

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

python 3 читаем файл и записываем блоками

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)

Офлайн

#3 Ноя. 30, 2013 11:38:23

Inok
Зарегистрирован: 2013-09-11
Сообщения: 41
Репутация: +  -1  -
Профиль   Отправить e-mail  

python 3 читаем файл и записываем блоками

День добрый.
если честно то в python только погружаюсь и знаю мало. читать, обязательно прочитаю.
но если возможно для вашего кода можно комментарии и чем дибильнее, однозначнее и проще тем лучше, не совсем разобрался в наследовании.
в чистом виде мне выдал:

> "Python " temp.py
  File "temp.py", line 12
    fout.write('{\n')
    ^
IndentationError: unexpected indent

Офлайн

#4 Ноя. 30, 2013 13:17:01

Inok
Зарегистрирован: 2013-09-11
Сообщения: 41
Репутация: +  -1  -
Профиль   Отправить e-mail  

python 3 читаем файл и записываем блоками

Я решил вот так:

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)

Расскажите как правильнее!

Офлайн

#5 Ноя. 30, 2013 17:36:58

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

python 3 читаем файл и записываем блоками

Inok
в чистом виде мне выдал:
Inok
IndentationError: unexpected indent

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



Офлайн

#6 Дек. 1, 2013 03:49:37

Inok
Зарегистрирован: 2013-09-11
Сообщения: 41
Репутация: +  -1  -
Профиль   Отправить e-mail  

python 3 читаем файл и записываем блоками

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

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

Офлайн

#7 Дек. 1, 2013 13:24:22

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

python 3 читаем файл и записываем блоками

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

Этот код работает точно также



Офлайн

#8 Дек. 1, 2013 19:22:24

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

python 3 читаем файл и записываем блоками

Inok
with open('new 2.txt', 'rb') as fin, \
зачем там 'rb' ?



Офлайн

#9 Дек. 1, 2013 20:23:45

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

python 3 читаем файл и записываем блоками

py.user.next
зачем там ‘rb’ ?

rb универсальнее



Офлайн

#10 Дек. 1, 2013 23:19:15

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

python 3 читаем файл и записываем блоками

Budulianin
rb универсальнее
в задании - работа со строками => нужен текстовый режим
он блоком называет набор строк, то есть это никакого отношения к блочному чтению не имеет



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version