@abyr78

Как из другого?

Нашёл так: читая Real World Haskell, узнал про комбинаторную библиотеку для синтаксического анализа Parsec. Примеры в книжке впечатлили. В отличие от традиционного подхода, при этом нет разделения на лексический анализ (выделение «слов»-лексем) и синтаксический анализ (преобразование потока «слов» в упорядоченную структуру данных) — в комбинаторном парсинге эти два этапа объединяются. Берутся небольшие функции, распознающие элементы текста, и затем они комбинируются в соответветствии с синтаксисом текста. Таким образом, сама комбинация функций непосредственно отражает грамматику, и она же, естественно, является и программой для разбора текста. Как у всякой удачной идеи, у Parsec есть множество подражаний. Для Python комбинаторных парсеров нашлось целых два уже три уже четыре — Pysec, Pyparsing, LEPL (для Python 2.6/3.0) и funcparselib. Я буду говорить о pyparsing.
  • Вопрос задан
  • 2418 просмотров
Пригласить эксперта
Ответы на вопрос 4
aTwice
@aTwice
Программист C++, C#, Java, JavaScript, Python.
1) сохранить 1й файл в формат CSV, чтобы не мучиться. Буду его называть 1й файл
2) По 1-му файлу собрать setиз ФИО.
3) открыть на запись 3й файл
4) Построчно читать 2й файл, разбирать строку, вытягивать ФИО, телефон. Если ФИО в set, то сохранять в 3й файл строку ФИО + телефон.
Ответ написан
Комментировать
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Тавк вроде бы достаточно простая задача. Если все ФИО из первого файла помещаются в память, например в dict, то:
1) создаем dict с ключём по ФИО из первого файла и пустым массивом
2) бежим по второму файлу посторочно и проверяем ФИО по ключу, если ключ есть, то добавляем в массив телефон.
3) Сохраняем все записи из dict, где массив не пуст.

# stage 1
all_fio = dict()
with open('myfiofile','r') as fp_fio:
  for line in fp_fio:
     (_f,_i,_o,_,_)  = line.split(';')
     _fio = _f+' '+_i +' ' + _o
     all_fio[_fio] = []

# stage 2
with open('mybilphonelog','r') as fp_log:
  for line in fp_log:
     (_t1,_t2,_fio,_)  = line.split(';')
     if all_fio.has_key(_fio):
        all_fio[_fio].append(_t1)
        all_fio[_fio].append(_t2)

# stage 3
import json
json.dump(all_fio, open('myresultfile','w'))

PS. код не отлаживал! могут быть апшибки
Ответ написан
Комментировать
@vilgeforce
Раздолбай и программист
Загнать все это в mysql и парой запросов получить нужные данные - не вариант?
Ответ написан
@ShamblerR
бля ребят вы че ху..ту воротите
1. у всех ли есть этот телефон
2. Всегда ли есть табы, даже пир отсутствующих строках
Если все что вам нужно
это взять 1 слово и через 5 табов взять другое, то тут 1 строчка.
Давай пример файла
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы