<p>从必要的导入开始:</p>
<pre><code>import pandas as pd
import xml.etree.ElementTree as et
import re
</code></pre>
<p>然后,要从要读取的标记中删除前导零,请定义以下函数:</p>
<pre><code>def stripLZ(src):
return re.sub(r'^0+(?=\d)', '', src)
</code></pre>
<p>要读取源文件及其根元素,请执行:</p>
<pre><code>tree = et.parse('transaction.xml')
root = tree.getroot()
</code></pre>
<p>要从<em>根</em>级别读取标记(而不是从<em>项</em>读取),请执行:</p>
<pre><code>dt = root.find('date').text
tck = root.find('ticket').text
val = root.find('value').text
notend = stripLZ(root.find('notenders').text)
</code></pre>
<p>剩下的两个标记向下一层,所以从读取它们的父标记开始:</p>
<pre><code>tdet = root.find('tenderdetail')
</code></pre>
<p>从中读出这些标签:</p>
<pre><code>tendtyp = stripLZ(tdet.find('tendertype').text)
tendamt = tdet.find('tenderamt').text
</code></pre>
<p>请注意,我在这里使用了<em>stripLZ</em>函数(将使用它)
几倍以上)。你知道吗</p>
<p>现在有时间创建结果数据帧:</p>
<pre><code>df_cols = ['date', 'ticket', 'value', 'notenders',
'tendertype', 'tenderamt', 'receipeno', 'price', 'qty']
df = pd.DataFrame(columns = df_cols)
</code></pre>
<p>加载回路可采用iter法进行:</p>
<pre><code>for it in root.iter('item'):
rcp = it.find('receipeno').text
prc = it.find('price').text
qty = stripLZ(it.find('qty').text)
df = df.append(pd.Series([dt, tck, val, notend,
tendtyp, tendamt, rcp, prc, qty],
index = df_cols), ignore_index=True)
</code></pre>
<p>此循环:</p>
<ul>
<li>迭代所有<em>项</em>标记,无论其深度如何。你知道吗</li>
<li>从当前<em>项</em>读取3个标记。你知道吗</li>
<li>将行追加到结果数据帧。你知道吗</li>
</ul>