Форум сайта python.su
0
У меня по исследуемой html странице есть таблицы, но т.к. я художник и я так вижу я пошел путем, котором вы, метры пайтона, если и баловались, то на заре своего обучения, прошу вот еще с чем помочь.
Есть таблица, я ее отформатировал и получил строку sovlad:
{ <> Иванов Анатолий Афанасьевич <> место <> 9 000 <> 90 <> 23.12.2002 <> Иванова Нина Иосифовна <> <> 1 000 <> 10 <> 23.12.2002 <><>< 0>К содержанию <1 > <> Совладельцы (источник: ГМЦ Росстата) </1> < > <> <> < > <> < “-: -: 10 : 000000 -: ”> Дата обновления в 07.07.2014 < “ ” “:100%-:”> < “ ” > < “:30%”> Наименование < “:30%”> }
Если записать построчно, то:
<> Иванов Анатолий Афанасьевич <> место <> 9 000 <> 90 <> 23.12.2002
<> Иванова Нина Иосифовна <> место <> 1 000 <> 10 <> 23.12.2002
Таких строк может быть 20, а может не быть ни одной, значит надо циклом пройти, да?
Пробую так:
pattern=r'(<>(?:([А-я\s]*)<>([А-я\s.,]*)<>(?:[\d\s]*)[<>\s]*([\d]+)[<>\s]*[\d.\s]*))' for line in sovlad: FIO, Mesto, Chast=re.search(pattern, sovlad).groups() if line: print('FIO={}, Mesto={}, Chast={}.'.format(FIO, Mesto, Chast)) else: print('Error: ')
Отредактировано Kir@ (Сен. 10, 2015 05:47:20)
Офлайн
0
Указанную выше строку обработал так:
pattern=r'<>(?:([А-я\s]*)<>([А-я\s.,]*)<>(?:[\d\s]*)[<>\s]*([\d]+)[<>\s]*[\d.\s]*)' a=re.findall(pattern, sovlad) for match in a: print(match)
Офлайн
0
a=re.finditer(pattern, sovlad) for match in a: print(match.group(1), ", местонахождение:", match.group(2), " (", match.group(3), "%)")
Офлайн
0
Итак, есть строка. С нее надо получить переменные, которыми потом можно оперировать.
sovlad='{ <> Иванов Анатолий Афанасьевич <> место <> 9 000 <> 90 <> 23.12.2002 <> Иванов Нина Иосифовна <> <> 1 000 <> 10 <> 23.12.2002 <><>< 0>К содержанию <1 > <> Совладельцы (источник: ГМЦ Росстата) </1> < > <> <> < > <> < "-: -: 10 : 000000 -: "> Дата обновления в СПАРК: 07.07.2014 < " " ":100%-:"> < " " > < ":30%"> Наименование < ":30%"> }' pattern=r'<>(?:([А-я\s]*)<>([А-я\s.,]*)<>(?:[\d\s]*)[<>\s]*([\d]+)[<>\s]*[\d.\s]*)' dano=re.M | re.S | re.U object = re.compile(pattern, dano) result=object.finditer( sovlad ) group_name_by_index = dict( [ (v, k) for k, v in object.groupindex.items() ] ) print (group_name_by_index) for match in result: for group_index, group in enumerate(match.groups()): if group: print(group)
Офлайн
857
Ну что? Созрел для lxml или bs? Этот способ, который ты выбрал, - неправильный путь.
Офлайн
0
py.user.nextНет, но узнал чем finditer отличается от findall и search.
Созрел для lxml или bs?
py.user.nextЭто мой путь. И он правильный, пусть только с моей точке зрения.
способ, который ты выбрал, - неправильный путь.
Офлайн
857
Kir@Мы это всё проходили на своём опыте. Польза, конечно, есть, но времени тратится много - пропорционально количеству неправильных путей.
Это мой путь. И он правильный, пусть только с моей точке зрения.
Офлайн
0
Переделал код на
dano=re.M | re.S | re.U object = re.compile(pattern, dano) result=object.findall( sovlad ) group_name_by_index = dict( [ (m, s, u) for m, s, u in object.groupindex.items() ] ) for match in result: for group_index, group in enumerate(match): if group: print(group)
Офлайн