<p>主要的问题是,每次我发现一个以<code>2</code>开头的元素时,我都想为以<code>4</code>开头的元素创建一个父标记,所以要解决这个问题,我唯一需要做的就是在找到一个元素<code>2</code>之后,不再逐行读取,而是将<code>4</code>和<code>5</code>分组进入两个不同的数组,然后我只使用<code>4</code>和<code>5</code>进行迭代,它们与元素<code>2</code>上的确切客户机匹配</p>
<pre><code>while line_number <= max_lines:
if lst[line_number][0] == '2':
a = lst[line_number]
five = [] # Only id 5 for this resume
for i in only_fives:
if i[168:180] in a[19:32]:
five.append(i)
four = []
for i in only_fours:
if i[19:32] in a[19:32]:
four.append(i)
</code></pre>
<p>这是将数据创建到标签4和5中的功能:</p>
<pre><code>def fours_and_fives(fours, fives, parent):
for d2 in fives:
PROMOTION= ET.SubElement(parent, "Promotion")
PROMOTION.text = '\n'
title= ET.SubElement(PROMOTION, "PromotionTitle")
title.text = d2[1:51].strip()
title.tail = '\n'
for d1 in fours:
if d1[139:189].strip() in d2[1:51].strip():
dt = ET.SubElement(PROMOTION, "promo")
dt.text = '\n'
a = d1
e = ET.SubElement(dt, "name")
e.text = a[1:19]
e.tail = '\n'
e = ET.SubElement(dt, "idClient")
e.text = a[19:32].lstrip('0')
e.tail = '\n'
e = ET.SubElement(dt, "card")
e.text = a[32:52].strip()
e.tail = '\n'
e = ET.SubElement(dt, "lastDigits")
e.text = a[52:56]
e.tail = '\n'
e = ET.SubElement(dt, "date")
e.text = format_fecha(a[56:64])
e.tail = '\n'
e = ET.SubElement(dt, "nameMarket")
e.text = a[64:114].strip()
e.tail = '\n'
e = ET.SubElement(dt, "coupon")
e.text = a[114:122]
e.tail = '\n'
e = ET.SubElement(dt, "numberOfPayments")
e.text = a[122:124]
e.tail = '\n'
e = ET.SubElement(dt, "spending")
e.text = format_money(a[124:139])
e.tail = '\n'
e = ET.SubElement(dt, "promotion")
e.text = a[139:189].strip()
e.tail = '\n'
e = ET.SubElement(dt, "refund")
e.text = format_money(a[189:204])
e.tail = '\n'
e = ET.SubElement(dt, "thing")
e.text = format_money(a[204:219])
e.tail = '\n'
e = ET.SubElement(dt, "dateRefund")
e.text = format_fecha(a[219:227])
e.tail = '\n'
dt.tail = '\n'
st = ET.SubElement(PROMOTION, "PromoSubtotal") # Elements 5
st.text = '\n'
e = ET.SubElement(st, "promotion")
e.text = d2[1:51].strip()
e.tail = '\n'
e = ET.SubElement(st, "description")
e.text = d2[51:151].strip()
e.tail = '\n'
e = ET.SubElement(st, "spending")
e.text = format_money(d2[151:166])
e.tail = '\n'
st.tail = '\n'
PROMOCION.tail = '\n'
</code></pre>
<p><code>format_money</code>是一个函数,它将数字串格式化为带有千点和十进制逗号的数字</p>
<p><code>format_fecha</code>是另一个格式化日期的函数</p>