我能够使用selenium python捕获我需要的数据,但我想知道如何递归地通过几乎一致的结构化文本来创建新对象。为了达到目的,selenium将其输出到.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
几百行,在(00#)之前的0到4个空格。目标是通过django orm获取每个并使用属性创建一个新对象。大概如果我可以将每两行分组,那么我就可以运行一个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()
答案 0 :(得分:1)
正如你所建议我一次读两行:
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
然后正则表达我的方式...
编辑: 实际上我认为正则表达式甚至不是必需的。
仅仅分割数据就足够了
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()