Skip to content

Instantly share code, notes, and snippets.

@cabral
Last active May 11, 2020 18:18
Show Gist options
  • Save cabral/ceb8ab04653148b7d6b9662ae2a36f69 to your computer and use it in GitHub Desktop.
Save cabral/ceb8ab04653148b7d6b9662ae2a36f69 to your computer and use it in GitHub Desktop.
import xml.etree.ElementTree as ET
import pandas as pd
tree = ET.parse("dataset_2016.xml")
root = tree.getroot()
lottos = tree.findall('.//lotto')
columns = [
"cig",
"oggetto",
"sceltaContraente",
"importoAggiudicazione",
"importoSommeLiquidate",
"strutturaProponente_codiceFiscaleProp",
"strutturaProponente_denominazione",
"tempiCompletamento_dataInizio",
"tempiCompletamento_dataUltimazione",
"aggiudicatario_codiceFiscale",
"aggiudicatario_ragioneSociale",
"aggiudicatario_membri"]
rows = list()
df = pd.DataFrame(columns=columns)
for children in lottos:
cig = children.find('cig').text if children.find('cig') is not None else None
oggetto = children.find('oggetto').text if children.find('oggetto') is not None else None
sceltaContraente = children.find('sceltaContraente').text if children.find('sceltaContraente') is not None else None
importoAggiudicazione = children.find('importoAggiudicazione').text if children.find('importoAggiudicazione') is not None else None
importoSommeLiquidate = children.find('importoSommeLiquidate').text if children.find('importoSommeLiquidate') is not None else None
strutturaProponente_codiceFiscaleProp = children.find('strutturaProponente//codiceFiscaleProp').text if children.find('strutturaProponente//codiceFiscaleProp') is not None else None
strutturaProponente_denominazione = children.find('strutturaProponente//denominazione').text if children.find('strutturaProponente//denominazione') is not None else None
tempiCompletamento_dataInizio = children.find('tempiCompletamento//dataInizio').text if children.find('tempiCompletamento//dataInizio') is not None else None
tempiCompletamento_dataUltimazione = children.find('tempiCompletamento//dataUltimazione').text if children.find('tempiCompletamento//dataUltimazione') is not None else None
aggiudicatario_codiceFiscale = children.findall('aggiudicatari//aggiudicatario//codiceFiscale')
codice = ''
for i in aggiudicatario_codiceFiscale:
codice += (f'{i.tag}: {i.text} | ')
aggiudicatario_codiceFiscale = codice
aggiudicatario_ragioneSociale = children.findall('aggiudicatari//aggiudicatario//ragioneSociale')
ragioneSociale = ''
for i in aggiudicatario_ragioneSociale:
ragioneSociale += (f'{i.tag}: {i.text} | ')
aggiudicatario_ragioneSociale = ragioneSociale
raggruppamento = children.findall('aggiudicatari//aggiudicatarioRaggruppamento') if children.findall('aggiudicatari//aggiudicatarioRaggruppamento') is not None else None
dati_membri = ''
if raggruppamento:
for member in raggruppamento:
for item in member:
for n in item:
dati_membri += (f'{n.tag}: {n.text} | ')
aggiudicatario_membri = dati_membri
rows.append({
"cig": cig,
"oggetto": oggetto,
"sceltaContraente": sceltaContraente,
"importoAggiudicazione": importoAggiudicazione,
"importoSommeLiquidate": importoSommeLiquidate,
"strutturaProponente_codiceFiscaleProp": strutturaProponente_codiceFiscaleProp,
"strutturaProponente_denominazione": strutturaProponente_denominazione,
"tempiCompletamento_dataInizio": tempiCompletamento_dataInizio,
"tempiCompletamento_dataUltimazione": tempiCompletamento_dataUltimazione,
"aggiudicatario_codiceFiscale": aggiudicatario_codiceFiscale,
"aggiudicatario_ragioneSociale": aggiudicatario_ragioneSociale,
"aggiudicatario_membri": aggiudicatario_membri})
out_df = pd.DataFrame(rows, columns = columns)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment