0
我想弄清楚为什么我的代码行为与正常执行不同。我已经看到了这一点,但它不是我的情况:调试行为不同于python中的正常执行
What to do, if debug behaviour differs from normal execution?
我解析XML文档的数据帧,这样我就可以转换成CSV或Excel文件。正常执行时,它只解析“LOCALIDADE”节点的最后一个“CPE”。
这是我的XML文件的块:
<DISTRITO xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<NOME_DISTRITO>BRAGANCA</NOME_DISTRITO>
<CONCELHO>
<NOME_CONCELHO>ALFANDEGA DA FE</NOME_CONCELHO>
<FREGUESIA>
<NOME_FREGUESIA>AGROBOM</NOME_FREGUESIA>
<LOCALIDADE>
<NOME_LOCALIDADE>AGROBOM</NOME_LOCALIDADE>
<CODIGO_POSTAL>5350</CODIGO_POSTAL>
<CPE>PT2000022152377DE</CPE>
<CPE>PT2000022152388XX</CPE>
<CPE>PT2000022152399XK</CPE>
<CPE>PT2000022152402BR</CPE>
<CPE>PT2000022152424NT</CPE>
</LOCALIDADE>
</FREGUESIA>
<FREGUESIA>
<NOME_FREGUESIA>ALFANDEGA DA FE</NOME_FREGUESIA>
<LOCALIDADE>
<NOME_LOCALIDADE>ALFANDEGA DA FE</NOME_LOCALIDADE>
<CODIGO_POSTAL>5350</CODIGO_POSTAL>
<CPE>PT2000022153052QF</CPE>
<CPE>PT2000022153085VV</CPE>
<CPE>PT2000022153108HV</CPE>
<CPE>PT2000022153119LM</CPE>
</LOCALIDADE>
</FREGUESIA>
</CONCELHO>
</DISTRITO>
此代码的工作对我来说,当我调试它:
import xml.etree.ElementTree as et
import pandas as pd
path = '/Path/toFile.xml'
data = []
for (ev,el) in et.iterparse(path):
print (el.tag, el.text)
if el.tag == 'NOME_DISTRITO': nome = el.text
if el.tag == 'NOME_CONCELHO': nc = el.text
if el.tag == 'NOME_FREGUESIA': nf = el.text
if el.tag == 'NOME_LOCALIDADE': nl = el.text
if el.tag == "LOCALIDADE":
inner = {}
inner['NOME_DISTRITO'] = nome
inner['NOME_CONCELHO'] = nc
inner['NOME_FREGUESIA'] = nf
for i in el:
print (i.tag,i.text)
print(data)
inner[i.tag] = i.text
if inner.has_key('CPE'):
data.append(inner)
df = pd.DataFrame(data)
df.to_csv('/Users/DanielMelo/Documents/Endesa/Portugal/CPE.csv',columns=['CPE','NOME_CONCELHO','NOME_FREGUESIA',
'NOME_LOCALIDADE','CODIGO_POSTAL'])
不过这是结果,当我用正常执行运行:
CPE NOME_CONCELHO NOME_FREGUESIA NOME_LOCALIDADE CODIGO_POSTAL
PT2000022152424NT ALFANDEGA DA FE AGROBOM AGROBOM 5350
PT2000022152424NT ALFANDEGA DA FE AGROBOM AGROBOM 5350
PT2000022152424NT ALFANDEGA DA FE AGROBOM AGROBOM 5350
PT2000022152424NT ALFANDEGA DA FE AGROBOM AGROBOM 5350
PT2000022152424NT ALFANDEGA DA FE AGROBOM AGROBOM 5350
PT2000022153119LM ALFANDEGA DA FE ALFANDEGA DA FE ALFANDEGA DA FE 5350
PT2000022153119LM ALFANDEGA DA FE ALFANDEGA DA FE ALFANDEGA DA FE 5350
PT2000022153119LM ALFANDEGA DA FE ALFANDEGA DA FE ALFANDEGA DA FE 5350
PT2000022153119LM ALFANDEGA DA FE ALFANDEGA DA FE ALFANDEGA DA FE 5350
我不知道当我将字典添加到列表中,或者某种冲突wh时它可能会成为问题它试图转换为CSV(我不认为是这种情况)。
但正如我所说的那样,我有我想要的结果,当我调试,所以我看不出有什么问题。
旁白:性能问题:很多'if'可以开启进入'elif',速度可能会好很多。 –
因此,每次我想将一个字典追加到列表中,我需要追加一个副本?不是具有不同价值的字典,而是一个副本?谢谢你的帮助!它的作品:) –
@JulianaRivera:如果你不创建一个副本,你所做的只是添加另一个参考;所有引用都显示相同的字典数据,因此您将在CSV输出中获得相同的数据,并重复。 –