Рекурсивно анализировать вывод .text из селена в модель Django - PullRequest
0 голосов
/ 13 июня 2018

Мне удалось захватить нужные мне данные с помощью selenium python, но мне интересно, как рекурсивно пройти почти согласованно структурированный текст для создания новых объектов.Чтобы добраться до сути, селен выведите это в файл .txt.Имена были изменены, чтобы защитить невинных.

  (001) DOLE, BOB & ELIZABETH - 1345641
17.23 92.55 22.05 07/24/2007
   (002) FRANKLIN, BENJAMIN - 4005648
88.38 1102.83 1118.32 11/02/2008
(002) CLINTON, WILLIAM & HILLARY - 768568
0.00 288.23 56.00 01/01/1989
    (005) JEFFERSON, THOMAS & MARTHA - 5487784
9230.02 23813.11 555.23 01/04/1780

Несколько сотен строк этого, в диапазоне от 0 до 4 пробелов перед (00 #).Цель состоит в том, чтобы взять каждого из них и создать новый объект с атрибутами через форму Джанго.Предположительно, если я могу сгруппировать каждые две строки, то я мог бы просто запустить цикл for.Мне не нужно указывать число в скобках, поэтому пробелы не будут иметь значения, я просто буду искать фамилию, которая начинается через один пробел после (###).

Любые рекомендации по запускучерез эти?Идеальный результат для каждой пары строк будет следующим:

entry = Politician.create(
    id = 1345641,
    last_name = 'Dole',
    first_name = 'Bob',
    secondary_first_name = 'Elizabeth',
    amount_one = 17.23,
    amount_two = 92.55,
    amount_three = 22.05,
    favorite_date = parse(07/24/2007)
entry.save()

1 Ответ

0 голосов
/ 13 июня 2018

Как вы и предлагали, я бы прочитал две строки за раз:

import itertools

with open(fn) as f:
    for two_lines in itertools.zip_longest(f, f, fillvalue=''):
        print(' '.join(two_lines))

Вывод:

  (001) DOLE, BOB & ELIZABETH - 1345641 17.23 92.55 22.05 07/24/2007
   (002) FRANKLIN, BENJAMIN - 4005648 88.38 1102.83 1118.32 11/02/2008
(002) CLINTON, WILLIAM & HILLARY - 768568 0.00 288.23 56.00 01/01/1989
    (005) JEFFERSON, THOMAS & MARTHA - 5487784 9230.02 23813.11 555.23 01/04/1780

и затем повторил мой путь через это ...

edit: на самом деле я думаю, что регулярное выражение даже не понадобится.

этого должно быть достаточно, чтобы просто разделить данные, как

line = ' '.join(two_lines)
line = line.strip()[5:] # remove whitespace and (001)
name, numbers = line.split('-')
id, amount_one, amount_two, amount_three, favorite_date = numbers.split()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...