Ich versuche herauszufinden, warum mein Code-Verhalten von der normalen Ausführung unterscheidet. Ich habe gesehen, aber es ist nicht mein Fall:Debug-Verhalten unterscheidet sich von der normalen Ausführung in Python
What to do, if debug behaviour differs from normal execution?
Ich bin ein XML-Dokument zu einem Datenrahmen parsen, so kann ich in eine csv konvertieren oder Excel Datei. Bei normaler Ausführung wird nur der letzte "CPE" des Knotens "LOCALIDADE" analysiert.
Dies ist ein Teil meiner XML-Datei:
<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>
Dieser Code funktioniert für mich, wenn ich es bin Debuggen:
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'])
aber dies ist das Ergebnis, wenn ich mit dem normalen Ausführung auszuführen:
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
Ich weiß nicht, ob es ein Problem sein könnte, wenn ich das Diktat an meine Liste angehängt habe, oder irgendeine Art von Konflikt wh de es versucht, in csv zu konvertieren (was ich nicht denke, ist der Fall).
Aber wie gesagt, es funktioniert und ich habe das Ergebnis, dass ich will, wenn ich Debugging bin, so kann ich nicht sehen, was das Problem ist.
beiseite: Performance-Problem: eine Menge 'if' gedreht werden kann
Sie einfach Ihr Problem in einer interaktiven Sitzung wiedergeben kann in 'elif' könnte die Geschwindigkeit viel besser sein. –
Also jedes Mal, wenn ich ein Wörterbuch an eine Liste anhängen möchte, muss ich eine Kopie anhängen? nicht das gleiche Wörterbuch mit unterschiedlichem Wert, aber eine Kopie? Danke für Ihre Hilfe! Es funktioniert :) –
@JulianaRivera: Wenn Sie keine Kopie erstellen, fügen Sie nur eine weitere Referenz hinzu; Alle Referenzen zeigen dieselben Wörterbuchdaten an, sodass Sie dieselben Daten in der CSV-Ausgabe erhalten, die wiederholt werden. –