Найти - Пользователи
Полная версия: Парсинг файла
Начало » Python для новичков » Парсинг файла
1
myarik
Добрый день.

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

Что то мне подсказывает что мой вариант не совсем правильный. Подскажите как можно еще реализовать данную задачу?
s0rg
#-*- 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))

Исправленный вариант под многострочные описания
myarik
Спасибо, за ответ. Описание детали состоит более чем из одной строки.
s0rg
myarik
Описание детали состоит более чем из одной строки.
Исправленный код в первом посте.
myarik
Спасибо.
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