I am trying to figure out why my code behavior differs from normal execution. I have seen this, but it is not my case:
What to do, if debug behaviour differs from normal execution?
I'm parsing an XML document to a DataFrame, so I can convert into a csv or excel file. With normal execution, it only parses the last "CPE" of the "LOCALIDADE" node.
This is a chunk of my xml file:
<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>
This code works for me when I am debugging it:
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'])
But this is the result when I run with normal execution:
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
I don't know if it could be a problem when I append the dict into my list, or some kind of conflict when it is trying to convert to csv (which I don't think is the case).
But as I said it works and I have the result that I want when I am debugging, so I can not see what is the problem.