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輸出中獲得相同的數據,並重復。 –