Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 23, 2012 14:14:23

myarik
Зарегистрирован: 2012-11-20
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг файла

Добрый день.

Возникла простая задача распарсить файл. Файл имеет следующую структуру:
—-
Деталь:
Название детали
Описание:
Текст с описание детали
Деталь:
и.т.д.
—-
В результате нужно получить название деталей и описания.
Я реализовал данную задачу следующим образом (я новичок за код сильно не пинайте):

 text=''
 name=''
 shablon1=u'Деталь:'
 shablon2=u'Описание:'
 _f=open(filename,'r')
 for line in iter(_f):
     line=line.decode('utf8')
     if line.rstrip() == shablon1:
         if name and text:
             my_fun(name,text)
             text=''
         name=next(_f)[:-1]
     if line.rstrip() !=shablon1:
         if line.rstrip() !=shablon2:
             text+=line.rstrip()
 my_fun(name,text)

Что то мне подсказывает что мой вариант не совсем правильный. Подскажите как можно еще реализовать данную задачу?

Офлайн

#2 Ноя. 23, 2012 18:11:01

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Парсинг файла

#-*- coding: utf8 -*-
import os
lines = u'''Деталь:
Название детали
Описание:
Текст с описание детали
Еще Текст
Деталь:
Название детали2
Описание:
Текст с описание детали2
Еще текст2'''.splitlines()
def read_details(lines):
    result = {}
    for i, l in enumerate(lines):
        if l == u'Деталь:':
            is_desc = False
            desc = result.setdefault(lines[i+1], [])
        elif l == u'Описание:':
            is_desc = True
        elif is_desc:
            desc.append(l)
    return result
details = read_details(lines)
for name, desc in details.iteritems():
    print u'detail: {} description: {}'.format(name, os.linesep.join(desc))

Исправленный вариант под многострочные описания

Отредактировано s0rg (Ноя. 26, 2012 16:47:49)

Офлайн

#3 Ноя. 26, 2012 06:49:31

myarik
Зарегистрирован: 2012-11-20
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг файла

Спасибо, за ответ. Описание детали состоит более чем из одной строки.

Офлайн

#4 Ноя. 26, 2012 16:46:30

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Парсинг файла

myarik
Описание детали состоит более чем из одной строки.
Исправленный код в первом посте.

Офлайн

#5 Ноя. 27, 2012 12:54:17

myarik
Зарегистрирован: 2012-11-20
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг файла

Спасибо.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version