Si clasku è quello che ho detto anch'io che dovevo inserire un ciclo
da qualche parte ma non sapevo dove. Mi aspettavo qualcosa di più specifico nella risposta. Per quanto riguarda il nome del CSV non devo renderlo dinamico mi serve che tutti i file della directory finiscano in un CSV altrimenti per ogni XML creo un CSV. Comunque ho risolto pubblico il codice magari servirà nel futuro a qualcuno
codice:
'''Created on 18 mar 2019
@author: DIMA
'''
import csv
import xml.etree.ElementTree as ET
import os
"""
specifico la cartella dove risiedono i file XML
R davanti alla strinfa sta ad indicare che la stringa è in modalità RAW
Se vuoi ottenere lo stesso risultato senza la r devi fare lescaping del \
quindi C:\\Users\\ADMIN\\Desktop
"""
path = r"C:\\Users\ADMIN\Desktop\prog"
'''creo un array che utilizzero per salvare i nomi dei file nella directory'''
filenames = []
'''Ciclo for che salva nella variabile filename i nomi dei file XML
la variabile fullname associa il percorso ai file
e infine filenames che è il nosto array li metto in fila i percorsi insieme ai file che deve andare a prendere
'''
for filename in os.listdir(path):
if not filename.endswith('.xml'):
continue
fullname = os.path.join(path,filename)
print(fullname)
filenames.append(fullname)
csvfile = open('prova.csv','w',newline='') '''Apro un file CSV in modalità write newline---senza questo comando i dati sul CSV vengono messi solo su righe dispari'''
csv_writer = csv.writer(csvfile) '''Restituisce un oggetto writer responsabile della conversione dei dati dell'utente in stringhe delimitate sull'oggetto file specificato'''
'''Il ciclo FOR più importante ti prende ogni file XML ed estrae(parsa) i dati '''
for filename in filenames:
tree = ET.parse(filename)
root = tree.getroot()
PrimoFor=[] '''Array dove vengono appesi tutti i dati estratti di un file'''
'''Per estrarre dati diversi basta cambiare l'entita PADRE nei vari cicli for'''
print("Dati Riepilogo per aliquota IVA e natura")
for datir in root.iter('DatiRiepilogo'):
for element in datir:
print(element.tag,element.text)
PrimoFor.append(element.text)
for CedentePrestatore in root.iter('CedentePrestatore'):
for TagFiglioCedentePrestatore in CedentePrestatore:
for TagNipoteCedentePrestatore in TagFiglioCedentePrestatore:
for ProNipoteCedentePrestatore in TagNipoteCedentePrestatore:
print(ProNipoteCedentePrestatore.tag,ProNipoteCedentePrestatore.text)
PrimoFor.append(ProNipoteCedentePrestatore.text)
for DatiGeneraliDocumento in root.iter('DatiGeneraliDocumento'):
for FiglioDatiGeneraliDocumento in DatiGeneraliDocumento:
if(FiglioDatiGeneraliDocumento.tag!='Divisa'):
print(FiglioDatiGeneraliDocumento.tag,FiglioDatiGeneraliDocumento.text)
PrimoFor.append(FiglioDatiGeneraliDocumento.text)
for DatiPagamento in root.iter('DatiPagamento'):
for TagFiglioDatiPagamento in DatiPagamento:
for TagNipoteDatiPagamento in TagFiglioDatiPagamento:
if(TagNipoteDatiPagamento.tag=='ModalitaPagamento'):
print(TagNipoteDatiPagamento.tag,TagNipoteDatiPagamento.text)
PrimoFor.append(TagNipoteDatiPagamento.text)
csv_writer.writerow(PrimoFor) '''scrive sul file csv'''
#closecsv
csvfile.close()