EAD_to_CSV_datini_titolimancanti.ipynb 82 KB

Inizio radunando tutti gli **IMPORT** necessari per girare il notebook, per chiarezza.
# IMPORT ESSENZIALI

# Per il parsing dell'XML -- questo pacchetto è incluso anche nel più generale lxml
import xml.etree.ElementTree as ET
# Utilities per leggere/scrivere files csv
import csv
# Utilities per gestire i character encodings
import unicodedata
# Dizionari ordinati
from collections import OrderedDict


# IMPORT OPZIONALI

# Per fare un stima della velocità delle varie istruzioni
from datetime import datetime
# Generatore di numeri casuali -- può sempre servire in fase di testing
from random import *
# Può servire per alcuni test
import sys
# FUNZIONI **ElementTree** ha una funzione built-in, **iter**, che scorre (molto velocemente) su tutti i 'nodi' dell'albero di dati che rappresenta l'XML. La funzione *iter* purtroppo però non traccia i nodi 'parents'. Ho esteso quindi la libreria scrivendo una mia versione di *iter*, **'traceElems'**, che dovrebbe riuscire a fornirci tutto quello di cui abbiamo bisogno. *traceElems* traccia tutti i nodi nell'albero tenendo conto dei 'parents', e restituisce tutti quelli per cui la funzione-argomento 'condition' ritorna True. **NON** indaga i nodi **figli** di quelli che sono restituiti.
# La funzione BASE: traceElems
def traceElems(node: ET.Element, condition, parents: list = [], coords: list = []):
    res = []
    jj = 0
    for child in node:
        if condition(child):
            res.append({'a_par': parents+[node],
                        'coords': coords+[jj], 'child': child})
        else:
            res = res + traceElems(child, condition, parents+[node], coords+[jj])
        jj = jj+1   
    return res

# Funzione-base per stoppare traceElems
def isLeafOrC(aa: ET.Element):
    if(aa.tag=='c' or len(aa)==0):
        return True
    else:
        return False
# Funzioni-utilità che servono solo a visualizzare meglio i dati sul notebook.
def shownode(node: ET.Element):
    return (node.tag, node.attrib, node.text.replace('\t','').replace('n','').strip() \
                               if type(node.text) is str else '')

def shownodelist(el: ET.Element):
    return list(map(shownode, el))


# Utility copiata da INTERNEZZ -- versione 'multipla' del metodo str.index:
def indices(lst, element):
    result = []
    offset = -1
    while True:
        try:
            offset = lst.index(element, offset+1)
        except ValueError:
            return result
        result.append(offset)
# AL LAVORO
**DA CAMBIARE A SECONDA DEL COMPUTER**: directory di input e output
import_dir = '/Users/federicaspinelli/Google Drive/OVI:CNR/LAVORO 2020/SELEZIONE CONTENUTI/01_ASPO/XDAMS/'
export_dir = '/Users/federicaspinelli/Google Drive/OVI:CNR/CSV/ASPO/datini/'
Importo il file XML del Datini, tracciando il tempo necessario
ts1 = datetime.timestamp(datetime.now())

treeDatini = ET.parse(import_dir + 'export_aspoSt001--datini.xml')
rootDatini = treeDatini.getroot()

ts2 = datetime.timestamp(datetime.now())
print(ts2 - ts1)
165.66787719726562
Uso *iter* per trovare tutti i nodi con label **'c'** nel file Datini, e mi faccio restituire il valore dell'attributo **'level'**; salvo tutti i *levels* nella variabile **cLevs**
cLevs = set(map(lambda a : a.attrib['level'], rootDatini.iter('c')))
print(cLevs)
{'subseries', 'series', 'item', 'collection', 'file', 'otherlevel', 'subfonds', 'fonds'}
A questo punto metto al lavoro la funzione **traceElems**: registro TUTTI i nodi **'c'** dividendoli in base all'attributo **'level'**; mi faccio stampare il numero di elementi per ogni livello ed il tempo trascorso. **OCCHIO:** per come è costruita, questa routine non va ad investigare dentro i livelli restituiti -- quindi si perde eventuali sotto-livelli con la stessa label di quelli che trova durante il primo scan. La presenza di sotto-livelli di questo tipo va controllata separatamente.
ts1 = datetime.timestamp(datetime.now())

allCs = {}

for label in cLevs:
    def tempFilt(aa: ET.Element):
        if(aa.tag=='c' and aa.attrib['level']==label):
            return True
        else:
            return False
       
    allCs[label] = traceElems(rootDatini, tempFilt);
    print('# di tag "c", livello ' + label + ', primo passaggio:', len(allCs[label]))

print()
print('Tempo trascorso:', datetime.timestamp(datetime.now()) - ts1)
# di tag "c", livello subseries, primo passaggio: 1365
# di tag "c", livello series, primo passaggio: 35
# di tag "c", livello item, primo passaggio: 149085
# di tag "c", livello collection, primo passaggio: 1
# di tag "c", livello file, primo passaggio: 15449
# di tag "c", livello otherlevel, primo passaggio: 10
# di tag "c", livello subfonds, primo passaggio: 14
# di tag "c", livello fonds, primo passaggio: 1

Tempo trascorso: 12.193603038787842
Notare che l'elaborazione è piuttosto veloce (sul mio laptop) malgrado la dimensione del file. Rimane il problema dei livelli dentro a livelli omonimi. Vediamo di affrontarlo.
ts1 = datetime.timestamp(datetime.now())

allCs2 = {}

for label in cLevs:
    partial = allCs[label]
    print('# di tag "c", livello ' + label + ', primo passaggio:', len(partial))
    allCs2[label] = partial
    partialUpdate = []
    while True:
        def tempFilt(aa: ET.Element):
            if(aa.tag=='c' and aa.attrib['level']==label):
                 return True
            else:
                 return False
        for node in partial:
            partialUpdate = partialUpdate + traceElems(node['child'], tempFilt)
        #print(len(partialUpdate))
        partial = partialUpdate
        if(len(partialUpdate)==0):
            break
        allCs2[label] = allCs2[label] + partial
        partialUpdate = []

    print('# di tag "c", livello ' + label + ', totali:', len(allCs2[label]))

print()
print('Tempo trascorso:', datetime.timestamp(datetime.now()) - ts1)
# di tag "c", livello subseries, primo passaggio: 1365
# di tag "c", livello subseries, totali: 1477
# di tag "c", livello series, primo passaggio: 35
# di tag "c", livello series, totali: 61
# di tag "c", livello item, primo passaggio: 149085
# di tag "c", livello item, totali: 149085
# di tag "c", livello collection, primo passaggio: 1
# di tag "c", livello collection, totali: 4
# di tag "c", livello file, primo passaggio: 15449
# di tag "c", livello file, totali: 15449
# di tag "c", livello otherlevel, primo passaggio: 10
# di tag "c", livello otherlevel, totali: 10
# di tag "c", livello subfonds, primo passaggio: 14
# di tag "c", livello subfonds, totali: 14
# di tag "c", livello fonds, primo passaggio: 1
# di tag "c", livello fonds, totali: 1

Tempo trascorso: 28.464100122451782
A questo punto diventa facile visualizzare tutti i dettagli dei vari elementi **'c'**, di qualunque livello; un esempio è fornito nella prossima cella. Si può cambiare l'elemento da visualizzare cambiando il valore delle variabili *ii* e *level*
ii = 1
level = 'otherlevel'
test = allCs2[level][ii]
toProc = traceElems(test['child'], isLeafOrC)

# Commentare/scommentare per stampare qui / su file
# (vedi anche in fondo alla cella)
#provaFileName = 'out.txt'
#orig_stdout = sys.stdout
#fp = open(export_dir + provaFileName, 'w')
#sys.stdout = fp
# fino qui + in fondo

print()
print()
print('Level:', level)
print('#:', ii)
print()
for node in toProc:
    print(shownodelist(node['a_par']))
    print(node['coords'])
    print(shownode(node['child']))
    print('# of children:', len(node['child']))
    print()


# Commentare/scommentare per stampare qui / su file
#sys.stdout = orig_stdout
#fp.close()
Level: otherlevel
#: 1

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('did', {}, '')]
[0, 0]
('unittitle', {'encodinganalog': 'ISAD 1 - 2 title'}, 'Busta 1167')
# of children: 0

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('processinfo', {}, ''), ('list', {}, ''), ('item', {}, '')]
[1, 0, 0, 0]
('date', {}, '19/03/2013')
# of children: 0

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('processinfo', {}, ''), ('list', {}, ''), ('item', {}, '')]
[1, 0, 0, 1]
('persname', {}, 'Admi xDams - ope source')
# of children: 0

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 0]
('c', {'audience': 'internal', 'id': 'ASPO00164307', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 1]
('c', {'audience': 'internal', 'id': 'ASPO00164308', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 2]
('c', {'audience': 'internal', 'id': 'ASPO00164309', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 3]
('c', {'audience': 'internal', 'id': 'ASPO00164310', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 4]
('c', {'audience': 'internal', 'id': 'ASPO00164311', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 5]
('c', {'audience': 'internal', 'id': 'ASPO00164312', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 6]
('c', {'audience': 'internal', 'id': 'ASPO00164313', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 7]
('c', {'audience': 'internal', 'id': 'ASPO00164314', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 8]
('c', {'audience': 'internal', 'id': 'ASPO00164315', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 9]
('c', {'audience': 'internal', 'id': 'ASPO00164316', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 10]
('c', {'audience': 'internal', 'id': 'ASPO00164317', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 11]
('c', {'audience': 'internal', 'id': 'ASPO00164318', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 12]
('c', {'audience': 'internal', 'id': 'ASPO00164319', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 13]
('c', {'audience': 'internal', 'id': 'ASPO00164320', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 14]
('c', {'audience': 'internal', 'id': 'ASPO00164321', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 15]
('c', {'audience': 'internal', 'id': 'ASPO00164322', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 16]
('c', {'audience': 'internal', 'id': 'ASPO00164323', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 17]
('c', {'audience': 'internal', 'id': 'ASPO00164324', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 18]
('c', {'audience': 'internal', 'id': 'ASPO00164325', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 19]
('c', {'audience': 'internal', 'id': 'ASPO00164326', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 20]
('c', {'audience': 'internal', 'id': 'ASPO00164327', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 21]
('c', {'audience': 'internal', 'id': 'ASPO00164328', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 22]
('c', {'audience': 'internal', 'id': 'ASPO00164329', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 23]
('c', {'audience': 'internal', 'id': 'ASPO00164330', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 24]
('c', {'audience': 'internal', 'id': 'ASPO00164331', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 25]
('c', {'audience': 'internal', 'id': 'ASPO00164332', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 26]
('c', {'audience': 'internal', 'id': 'ASPO00164333', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 27]
('c', {'audience': 'internal', 'id': 'ASPO00164334', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 28]
('c', {'audience': 'internal', 'id': 'ASPO00164335', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 29]
('c', {'audience': 'internal', 'id': 'ASPO00164336', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 30]
('c', {'audience': 'internal', 'id': 'ASPO00164337', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 31]
('c', {'audience': 'internal', 'id': 'ASPO00164338', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 32]
('c', {'audience': 'internal', 'id': 'ASPO00164339', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 33]
('c', {'audience': 'internal', 'id': 'ASPO00164340', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 34]
('c', {'audience': 'internal', 'id': 'ASPO00164341', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 35]
('c', {'audience': 'internal', 'id': 'ASPO00164342', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 36]
('c', {'audience': 'internal', 'id': 'ASPO00164343', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 37]
('c', {'audience': 'internal', 'id': 'ASPO00164344', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 38]
('c', {'audience': 'internal', 'id': 'ASPO00164345', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 39]
('c', {'audience': 'internal', 'id': 'ASPO00164346', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 40]
('c', {'audience': 'internal', 'id': 'ASPO00164347', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 41]
('c', {'audience': 'internal', 'id': 'ASPO00164348', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 42]
('c', {'audience': 'internal', 'id': 'ASPO00164349', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 43]
('c', {'audience': 'internal', 'id': 'ASPO00164350', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 44]
('c', {'audience': 'internal', 'id': 'ASPO00164351', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 45]
('c', {'audience': 'internal', 'id': 'ASPO00164352', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 46]
('c', {'audience': 'internal', 'id': 'ASPO00164353', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 47]
('c', {'audience': 'internal', 'id': 'ASPO00164354', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 48]
('c', {'audience': 'internal', 'id': 'ASPO00164355', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 49]
('c', {'audience': 'internal', 'id': 'ASPO00164356', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 50]
('c', {'audience': 'internal', 'id': 'ASPO00164357', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 51]
('c', {'audience': 'internal', 'id': 'ASPO00164358', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 52]
('c', {'audience': 'internal', 'id': 'ASPO00164359', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 53]
('c', {'audience': 'internal', 'id': 'ASPO00164360', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 54]
('c', {'audience': 'internal', 'id': 'ASPO00164361', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 55]
('c', {'audience': 'internal', 'id': 'ASPO00164362', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 56]
('c', {'audience': 'internal', 'id': 'ASPO00164363', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 57]
('c', {'audience': 'internal', 'id': 'ASPO00164364', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 58]
('c', {'audience': 'internal', 'id': 'ASPO00164365', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 59]
('c', {'audience': 'internal', 'id': 'ASPO00164366', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 60]
('c', {'audience': 'internal', 'id': 'ASPO00164367', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 61]
('c', {'audience': 'internal', 'id': 'ASPO00164368', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 62]
('c', {'audience': 'internal', 'id': 'ASPO00164369', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 63]
('c', {'audience': 'internal', 'id': 'ASPO00164370', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 64]
('c', {'audience': 'internal', 'id': 'ASPO00164371', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 65]
('c', {'audience': 'internal', 'id': 'ASPO00164372', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 66]
('c', {'audience': 'internal', 'id': 'ASPO00164373', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 67]
('c', {'audience': 'internal', 'id': 'ASPO00164374', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 68]
('c', {'audience': 'internal', 'id': 'ASPO00164375', 'level': 'item'}, '')
# of children: 3

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 69]
('c', {'audience': 'internal', 'id': 'ASPO00164376', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 70]
('c', {'audience': 'internal', 'id': 'ASPO00164377', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 71]
('c', {'audience': 'internal', 'id': 'ASPO00164378', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 72]
('c', {'audience': 'internal', 'id': 'ASPO00164379', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 73]
('c', {'audience': 'internal', 'id': 'ASPO00164380', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 74]
('c', {'audience': 'internal', 'id': 'ASPO00164381', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 75]
('c', {'audience': 'internal', 'id': 'ASPO00164382', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 76]
('c', {'audience': 'internal', 'id': 'ASPO00164383', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 77]
('c', {'audience': 'internal', 'id': 'ASPO00164384', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 78]
('c', {'audience': 'internal', 'id': 'ASPO00164385', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 79]
('c', {'audience': 'internal', 'id': 'ASPO00164386', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 80]
('c', {'audience': 'internal', 'id': 'ASPO00164387', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 81]
('c', {'audience': 'internal', 'id': 'ASPO00164388', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 82]
('c', {'audience': 'internal', 'id': 'ASPO00164389', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 83]
('c', {'audience': 'internal', 'id': 'ASPO00164390', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 84]
('c', {'audience': 'internal', 'id': 'ASPO00164391', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 85]
('c', {'audience': 'internal', 'id': 'ASPO00164392', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 86]
('c', {'audience': 'internal', 'id': 'ASPO00164393', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 87]
('c', {'audience': 'internal', 'id': 'ASPO00164394', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 88]
('c', {'audience': 'internal', 'id': 'ASPO00164395', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 89]
('c', {'audience': 'internal', 'id': 'ASPO00164396', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 90]
('c', {'audience': 'internal', 'id': 'ASPO00164397', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 91]
('c', {'audience': 'internal', 'id': 'ASPO00164398', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 92]
('c', {'audience': 'internal', 'id': 'ASPO00164399', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 93]
('c', {'audience': 'internal', 'id': 'ASPO00164400', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 94]
('c', {'audience': 'internal', 'id': 'ASPO00164401', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 95]
('c', {'audience': 'internal', 'id': 'ASPO00164402', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 96]
('c', {'audience': 'internal', 'id': 'ASPO00164403', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 97]
('c', {'audience': 'internal', 'id': 'ASPO00164404', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 98]
('c', {'audience': 'internal', 'id': 'ASPO00164405', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 99]
('c', {'audience': 'internal', 'id': 'ASPO00164406', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 100]
('c', {'audience': 'internal', 'id': 'ASPO00164407', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 101]
('c', {'audience': 'internal', 'id': 'ASPO00164408', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 102]
('c', {'audience': 'internal', 'id': 'ASPO00164409', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 103]
('c', {'audience': 'internal', 'id': 'ASPO00164410', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 104]
('c', {'audience': 'internal', 'id': 'ASPO00164411', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 105]
('c', {'audience': 'internal', 'id': 'ASPO00164412', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 106]
('c', {'audience': 'internal', 'id': 'ASPO00164413', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 107]
('c', {'audience': 'internal', 'id': 'ASPO00164414', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 108]
('c', {'audience': 'internal', 'id': 'ASPO00164415', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 109]
('c', {'audience': 'internal', 'id': 'ASPO00164416', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 110]
('c', {'audience': 'internal', 'id': 'ASPO00164417', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 111]
('c', {'audience': 'internal', 'id': 'ASPO00164418', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 112]
('c', {'audience': 'internal', 'id': 'ASPO00164419', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 113]
('c', {'audience': 'internal', 'id': 'ASPO00164420', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 114]
('c', {'audience': 'internal', 'id': 'ASPO00164421', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 115]
('c', {'audience': 'internal', 'id': 'ASPO00164422', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 116]
('c', {'audience': 'internal', 'id': 'ASPO00164423', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 117]
('c', {'audience': 'internal', 'id': 'ASPO00164424', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 118]
('c', {'audience': 'internal', 'id': 'ASPO00164425', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 119]
('c', {'audience': 'internal', 'id': 'ASPO00164426', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 120]
('c', {'audience': 'internal', 'id': 'ASPO00164427', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 121]
('c', {'audience': 'internal', 'id': 'ASPO00164428', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 122]
('c', {'audience': 'internal', 'id': 'ASPO00164429', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 123]
('c', {'audience': 'internal', 'id': 'ASPO00164430', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 124]
('c', {'audience': 'internal', 'id': 'ASPO00164431', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 125]
('c', {'audience': 'internal', 'id': 'ASPO00164432', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 126]
('c', {'audience': 'internal', 'id': 'ASPO00164433', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 127]
('c', {'audience': 'internal', 'id': 'ASPO00164434', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 128]
('c', {'audience': 'internal', 'id': 'ASPO00164435', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 129]
('c', {'audience': 'internal', 'id': 'ASPO00164436', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 130]
('c', {'audience': 'internal', 'id': 'ASPO00164437', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 131]
('c', {'audience': 'internal', 'id': 'ASPO00164438', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 132]
('c', {'audience': 'internal', 'id': 'ASPO00164439', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 133]
('c', {'audience': 'internal', 'id': 'ASPO00164440', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 134]
('c', {'audience': 'internal', 'id': 'ASPO00164441', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 135]
('c', {'audience': 'internal', 'id': 'ASPO00164442', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 136]
('c', {'audience': 'internal', 'id': 'ASPO00164443', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 137]
('c', {'audience': 'internal', 'id': 'ASPO00164444', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 138]
('c', {'audience': 'internal', 'id': 'ASPO00164445', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 139]
('c', {'audience': 'internal', 'id': 'ASPO00164446', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 140]
('c', {'audience': 'internal', 'id': 'ASPO00164447', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 141]
('c', {'audience': 'internal', 'id': 'ASPO00164448', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 142]
('c', {'audience': 'internal', 'id': 'ASPO00164449', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 143]
('c', {'audience': 'internal', 'id': 'ASPO00164450', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 144]
('c', {'audience': 'internal', 'id': 'ASPO00164451', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 145]
('c', {'audience': 'internal', 'id': 'ASPO00164452', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 146]
('c', {'audience': 'internal', 'id': 'ASPO00164453', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 147]
('c', {'audience': 'internal', 'id': 'ASPO00164454', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 148]
('c', {'audience': 'internal', 'id': 'ASPO00164455', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 149]
('c', {'audience': 'internal', 'id': 'ASPO00164456', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 150]
('c', {'audience': 'internal', 'id': 'ASPO00164457', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 151]
('c', {'audience': 'internal', 'id': 'ASPO00164458', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 152]
('c', {'audience': 'internal', 'id': 'ASPO00164459', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 153]
('c', {'audience': 'internal', 'id': 'ASPO00164460', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 154]
('c', {'audience': 'internal', 'id': 'ASPO00164461', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 155]
('c', {'audience': 'internal', 'id': 'ASPO00164462', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 156]
('c', {'audience': 'internal', 'id': 'ASPO00164463', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 157]
('c', {'audience': 'internal', 'id': 'ASPO00164464', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 158]
('c', {'audience': 'internal', 'id': 'ASPO00164465', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 159]
('c', {'audience': 'internal', 'id': 'ASPO00164466', 'level': 'item'}, '')
# of children: 5

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 160]
('c', {'audience': 'internal', 'id': 'ASPO00164467', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 161]
('c', {'audience': 'internal', 'id': 'ASPO00164468', 'level': 'item'}, '')
# of children: 4

[('c', {'audience': 'internal', 'id': 'ASPO00164306', 'level': 'otherlevel', 'otherlevel': 'container'}, ''), ('dsc', {}, '')]
[2, 162]
('c', {'audience': 'internal', 'id': 'ASPO00164469', 'level': 'item'}, '')
# of children: 5

(*NOTA X ME:* **'did' = 'Descriptive IDentification'**)
A questo punto, quello che devo fare è scrivere un **traduttore** -- una funzione che scorra l'output degli elementi esaminati e trasformi le info in modo da poterle esportare in formato csv (o in qualunque altro formato vogliamo). La mia attuale versione di **traduttore per gli item** è data nella prossima cella; accetta come argomento un nodo (che è supposto essere di tipo item) e restituisce un dict.
def traduttoreItem(elem):
    # Variabile che contiene l'output della traduzione:
    csvProt = {}

    # Processo i nodi-parent di 'elem'
    par_tags = list(map(lambda a: a.tag, elem['a_par']))
    par_attributes = list(map(lambda a: a.attrib, elem['a_par']))
    
    # e0: Le varie id dei nodi parent
    for ii in indices(par_tags, 'c'):
        key = 'id_' + par_attributes[ii]['level']
        csvProt[key] = par_attributes[ii]['id']

    # Processo i nodi-child di 'elem'
    toProc = traceElems(elem['child'], isLeafOrC)
    first = True
    for node in toProc:
        tags = list(map(lambda a: a.tag, node['a_par'])) + [node['child'].tag]
        attributes = list(map(lambda a: a.attrib, node['a_par'])) + [node['child'].attrib]
        content = node['child'].text

        # Da controllare solo per il primo nodo
        # (informazioni a livello del nodo, uguali per tutti i figli)
        if(first):
            # e1 ID della item
            csvProt['id'] = attributes[tags.index('c')]['id']
            # e2 Audience: external o internal
            try:
                csvProt['audience'] = attributes[tags.index('c')]['audience']
            except:
                pass
            # e3 Otherlevel
            try:
                csvProt['altro_livello'] = attributes[tags.index('c')]['otherlevel']
            except:
                pass
            first = False

        # La 'ciccia': si processa il contenuto vero e proprio
        # e4 Repository (qui dovrebbe essere sempre l'Archivio di Prato)
        if('repository' in tags):
            csvProt['repository'] = content  

        # e5 Bioghits
        if('bioghist' in tags):
            csvProt['bioghist'] = content    
        # e6 Arrangement
        elif('arrangement' in tags):
            csvProt['arrangement'] = content
        # e7 Related Material
        elif('relatedmaterial' in tags):
            csvProt['relatedmaterial'] = content
        
        # e8 Tipologia
        try:
            ii = tags.index('materialspec')
            if(attributes[ii]['label']=='tipologia'):
                csvProt['tipologia'] = content
        except:
            pass
        
        # e9 Segnature buste e registri Datini
        try:
            ii = tags.index('container')
            type1 = attributes[ii]['type']
            if(type1.find('numero un')>=0):
                csvProt['segnatura_registri_1'] = content
            elif(type1.find('numero sott')>=0):
                csvProt['segnatura_registri_2'] = content
            elif(type1=='busta'):
                csvProt['segnatura_busta'] = content
            elif(type1=='inserto'):
                csvProt['segnatura_inserto'] = content
        except:
            pass
        # e9 Segnatura codice
        try:
            ii = tags.index('num')
            type1 = attributes[ii]['type']
            if(type1=='chiave'):
               csvProt['segnatura_codice'] = content
        except:
            pass

        # e9 Segnature subseries
        if (attributes[tags.index('c')]['level']=='subseries' or attributes[tags.index('c')]['level']=='file'):
            try:
                ii = tags.index('unitid')
                if(attributes[ii]['type']=='segnatura'):
                    csvProt['segnatura_parent'] = content
            except:
                pass
        
        # e10 Titolo
        elif('title' in tags):
           csvProt['titolo_originale'] = content        
        
        # e11 Il titolo da unittitle 
        #m = re.search('AAA(.+?)ZZZ', text)
        #if m:
        #found = m.group(1)
        try:
            aa = csvProt['titolo_aspo']
        except:
            try:
                ii = tags.index('unittitle')
                try:
                    for chi in node['a_par'][ii]:
                        tails = "" + chi.tail              
                    csvProt['titolo_aspo'] = (node['a_par'][ii].text + tails).replace('\t','').replace('\n','').strip()
                except:
                    pass                          
            except:
                pass

        # e12 Scope-content head & body
        if('scopecontent' in tags):
            if('list' not in tags and 'head' in tags):
                csvProt['scope-content_head'] = content
            else:
                if('p' in tags and 'num' not in tags):
                    csvProt['scope-content_body'] = content
                if('num' in tags):
                    try:
                        ii = tags.index('num')
                        if(attributes[ii]['type']):
                            key = 'num_'+ attributes[ii]['type']
                            csvProt[key] = content
                    except:
                        pass    
        # e12 lista merci
        if('scopecontent' in tags):
            if('list' in tags):
                try:
                    ii = tags.index('list')
                    try:
                        csvProt['lista'] = csvProt['lista'] + ' | ' + content
                    except:
                        csvProt['lista'] = content
                except:
                    pass
        
        # e13 Origine
        try:
            ii = tags.index('origination')
            csvProt['origine'] = attributes[ii]['label'] + ': ' + content
        except:
            pass  
        # e14 Nome della compagnia
        if ('unittitle' in tags):
            if ('corpname' in tags):
                try:
                    ii = tags.index('corpname')     
                    if (attributes[ii]['authfilenumber'] or attributes[ii]['role']=='compagnia'):
                        try:
                            authId = attributes[ii]['authfilenumber']
                            csvProt['compagnia'] = '{nome: ' + content + ', authID: ' + authId + '}'
                        except:
                            csvProt['compagnia'] = '{nome: ' + content + '}'
                except:
                    pass       
        # e15 Soggetto 
        try:
            aa = csvProt['soggetto']
        except:
            try:
                ii = tags.index('subject')
                try:
                    csvProt['soggetto'] = str(node['a_par'][ii].text).replace('\t','').replace('\n','').strip()
                except:
                    csvProt['soggetto'] = str(content).replace('\t','').replace('\n','').strip()
            except:
                pass
        # e15 tipologia soggetto 
        if('subject' in tags):
            if ('emph' in tags):
                csvProt['tipologia_soggetto'] = content

        # e16 Persona + ruolo
        try:
            ii = tags.index('persname')
            key = 'persona_' + attributes[ii]['role']
            try:
                authId = attributes[ii]['authfilenumber']
                csvProt[key] = '{"nome": ' + "\"" + content + "\"" + ', "authID": ' + "\"" + authId + "\"" + '}'
            except:
                csvProt[key] = '{"nome": ' + "\"" + content + "\"" + '}'
        except:
            pass
                  
        
        # e17 Date varie: tutte quelle con 'type' definito + note
        if ('unittitle' in tags):
            try:
                ii = tags.index('date')
                key = 'data_' + attributes[ii]['type']
                aa = csvProt[key]
            except:
                try:
                    ii = tags.index('date')
                    try:
                        csvProt[key] = str(node['a_par'][ii].text).replace('\t','').replace('\n','').strip()
                        try:
                            ii = tags.index('emph')
                            csvProt[key+'_note'] = content
                        except:
                            pass
                    except:
                        csvProt[key] = str(content).replace('\t','').replace('\n','').strip()
                except:
                    pass 

        # e18 Data 1: periodo + note
        if('unitdate' in tags):
            csvProt['data_periodo'] = str(content).replace('\t','').replace('\n','').strip()
            try:
                ii = tags.index('emph')
                csvProt['data_periodo_note'] = content
            except:
                pass

        # e19 Luogo + 'ruolo'
        try:
            ii = tags.index('geogname')
            key = 'luogo_' + attributes[ii]['role']
            try:
                authId = attributes[ii]['authfilenumber']
                csvProt[key] = '{luogo: ' + content + ', authID: ' + authId + '}'
            except:
                csvProt[key] = '{luogo: ' + content + '}'
        except:
            pass
        
        # e20 Supporto fisico
        try:
            ii = tags.index('physfacet')
            if(attributes[ii]['type']=='supporto'):
                csvProt['supporto'] = content
        except:
            pass
        
        # e21 Physdesc
        if (attributes[tags.index('c')]['level']!='subfonds'): 
            if('physdesc' in tags):
                if('extent' not in tags and 'physfacet' not in tags):
                    csvProt['descrizione_fisica'] = content
                if('extent' in tags):
                    csvProt['numero'] = content
                if('genreform' in tags):
                    csvProt['genere'] = content
        
        # e21 Physdesc per subfonds
        if (attributes[tags.index('c')]['level']=='subfonds'):
            try:
                ii = tags.index('extent')
                try:
                    csvProt['numero'] = csvProt['numero'] + ' | ' + content
                except:
                   csvProt['numero'] = content
            except:
                pass
                try:
                    ii = tags.index('genreform')
                    try:
                        csvProt['genere'] = csvProt['genere'] + ' | ' + content
                    except:
                        csvProt['genere'] = content
                except:
                    pass              
        # e21 Container (solo per subseries vale come extent) 
        if (attributes[tags.index('c')]['level']=='subseries'):
            try:
                ii = tags.index('container')
                csvProt['extent'] = content
            except:
                pass
        
        # e22 Phystech  
        try:
            ii = tags.index('phystech')
            try:
                csvProt['conservazione'] = csvProt['conservazione'] + ' | ' + content
            except:
                csvProt['conservazione'] = content
        except:
            pass
        
        # e23 Consistenza
        try:
            ii = tags.index('extent')
            type1 = attributes[ii]['unit']
            cvsProt['consistenza'] = type1 + ': ' + content
        except:
            pass
        
        # e24 Note
        if('note' in tags):
            if('p' in tags):
                try:
                    aa = csvProt['nota']
                except:
                    try:
                        ii = tags.index('p')
                        try:
                            csvProt['nota'] = str(node['a_par'][ii].text).replace('\t','').replace('\n','').strip()
                        except:
                            csvProt['nota'] = str(content).replace('\t','').replace('\n','').strip()
                    except:
                        pass
        # e25 Odd
        if('odd' in tags):
            csvProt['altre_informazioni'] = content
        
        # e26 Oggetto digitale allegato (nome)
        # Questo è un campo multiplo; per il momento, salviamo tutto
        # su una cella concatenando e separando i campi con una pipe
        # '| '
        try:
            ii = tags.index('daoloc')
            out = attributes[ii]['title']
            try:
                csvProt['oggetto_digitale'] = csvProt['oggetto_digitale'] + ' | ' + out
            except:
                csvProt['oggetto_digitale'] = out
        except:
            pass
    
    return csvProt


# Di pari passo alla funzione, definisco un dict contenente tutti gli header;
# servirà per il CSV.
itemHeader = OrderedDict()

# e1 ID dell'entità
itemHeader.update({'id': '<c level="X" id=#>'})

# e2 Audience: external o internal
itemHeader.update({'audience': '<c level="item" audience=#>'})

# e3 Otherlevel
itemHeader.update({'altro_livello': '<c otherlevel=#>'})

# e4 Repository (qui dovrebbe essere sempre l'Archivio di Prato)
itemHeader.update({'repository': '<repository>#'})

# e5 Bioghist
itemHeader.update({'bioghist': '<bioghist=#>'})

# e6 Arrangement
itemHeader.update({'arrangement': '<arrangement=#>'})

# e7 Related Material
itemHeader.update({'relatedmaterial': '<relatedmaterial=#>'})

# e8 Tipologia
itemHeader.update({'tipologia': '<materialspec label="tipologia">#'})

# e9 Segnature buste e registri Datini
itemHeader.update(
{'segnatura_registri_1': '<container type="%numero un%">#',
 'segnatura_registri_2': '<container type="%numero sott%">#',
 'segnatura_inserto': '<container type="inserto">#',
 'segnatura_busta': '<container type="busta">#'})

# e9 Segnatura codice
itemHeader.update({'segnatura_codice': '<num type="chiave">#'})

# e9 segnatura subseries
itemHeader.update(
{'segnatura_parent': '<unitid type="segnatura">#'})

# e10 Titolo originale
itemHeader.update({'titolo_originale': '<title>#'})

# e11 Titolo ASPO
itemHeader.update({'titolo_aspo': '<unittitle>#'})

# e12 Scope content, head & body, e num allegati
itemHeader.update(
{'scope-content_head': '<scopecontent><head>#',
 'scope-content_body': '<scopecontent><p>#', 
 'num_allegati': '<num>#'})
# e12 lista merci
itemHeader.update({'lista': '<list>#'})

# e13 Origine
itemHeader.update({'origine': '<origination label=#1>#2, #1 - #2'})

# e14 Nome della compagnia
itemHeader.update({'compagnia': '<corpname>#'})

# e15 Soggetto
itemHeader.update({'soggetto': '<subject>#'})
itemHeader.update({'tipologia_soggetto': '<emph>#'})

# e16 Persona + ruolo
itemHeader.update(
{'persona_tenutario': '<persname role="tenutario">#', 
 'persona_destinatario': '<persname role="destinatario">#',
 'persona_mittente': '<persname role="mittente">#',
 'persona_indirizzata': '<persname role="indirizzata">#',
 'persona_mano': '<persname role="mano">#',})

# e17 Date varie: tutte quelle con 'type' definito + note
itemHeader.update(
{'data_inizio': '<date type="inizio">#', 'data_inizio_note': '<emph>#',
 'data_fine': '<date type="fine">#', 'data_fine_note': '<emph>#',
 'data_chiusura': '<date type="chiusura">#', 'data_chiusura_note': '<emph>#'})

# e18 Data 1: periodo
itemHeader.update({'data_periodo': '<unitdate>#' , 'data_periodo_note': '<unitdate>#'})

# e19 Luogo + 'ruolo'
itemHeader.update(
{"luogo_partenza": '<geogname role="partenza">#',
 "luogo_arrivo": '<geogname role="arrivo">#',
 "luogo_luogo": '<geogname role="luogo">#'})

# e20 Supporto fisico
itemHeader.update({'supporto': '<physfacet type="supporto">#'})

# e21 descrizione fisica
itemHeader.update({'descrizione_fisica': '<physdesc>#'})
itemHeader.update({'numero': '<extent>#'})
# container vale extent solo per subseries
itemHeader.update({'extent': '<container>#'})
itemHeader.update({'genere': '<genreform>#'})

# e22 phystech
itemHeader.update({'conservazione': '<phystech>#'})

# e23 Consistenza
itemHeader.update({'consistenza': '<extent unit=#1>#2, #1: #2'})

# e24 Note
itemHeader.update({'nota': '<note>#'})

# e25 Odd
itemHeader.update({'altre_informazioni': '<odd>#'})

# e26 Oggetto digitale allegato (nome)
itemHeader.update({'oggetto_digitale': '<daoloc title=#>'})

# e0: Le varie id dei nodi parent
itemHeader.update(
{'id_subfonds': '<c level="subfonds" id=#>',
 'id_fonds': '<c level="fonds" id=#>',
 'id_series': '<c level="series" id=#>',
 'id_subseries': '<c level="subseries" id=#>',
 'id_file': '<c level="file" id=#>',
 'id_otherlevel': '<c level="otherlevel" id=#>',
 'id_collection': '<c level="collection" id=#>'})
Test della funzione traduttore **NB:** l'ho definita basandomi sugli item, ma sembra funzionare decentemente anche sugli altri livelli!
jj = randint(0, len(allCs2['item']))
jj = 0
print(jj)
print()

test = allCs2['item'][248]
toShow = traduttoreItem(test)
for key in toShow.keys():
    print(key + ': ' + str(toShow[key]))
    print()
0

id_fonds: ASPO00000000

id_subfonds: ASPO00000001

id_series: ASPO00000016

id_subseries: ASPO00001817

id: ASPO00001828

audience: external

origine: Fondaco: AVIGNONE

tipologia: libro

repository: Archivio di Stato di Prato

titolo_aspo: QUADERNO DI RAGIONE

compagnia: {nome: COMP. TORO DI BERTO, FRANCESCO DI MARCO DATINI E TUCCIO LAMBERTUCCI NELL'ARTE DELLE MERCI, authID: IT-ASPO-AU00003-0005916}

soggetto: FINANZIARIO-MERCANTILE

data_inizio: 1368

data_fine: 1368

data_periodo: 1368-1368

segnatura_registri_1: 177

descrizione_fisica:  FORMATO MEZZANO; NUMERAZ. MODERNA CC. 34; NUMERAZ. ORIG. FINO A C. 21; COPERTA CARTACEA  
										(SALDO AL 17.09.1368 DI MERCANZIE, MASSERIZIE: CC. 4-30, 1368)

altre_informazioni: Copia del  n. 197 (n.v. 177/04).

# Export Produciamo il CSV per gli item tracciando, al solito, il tempo impiegato.
# Do it! Export del CSV - items.

ts1 = datetime.timestamp(datetime.now())

# Apro il file per l'export
with open(export_dir + "data_item.csv", "w", newline="") as csv_file:
    # Definisco la classe-motore per l'export
    writer = csv.DictWriter(csv_file, fieldnames=list(itemHeader.keys()))
    # Scrivo l'intestazione
    writer.writeheader()
    # Scrivo la seconda riga, esplicativa
    writer.writerow(itemHeader)
    # Scrivo gli item tradotti, uno a uno
    for ii in range(len(allCs2['item'])):
        test = allCs2['item'][ii]
        writer.writerow(traduttoreItem(test))

print('Tempo trascorso:', datetime.timestamp(datetime.now()) - ts1)
Tempo trascorso: 76.27489900588989
# Altri livelli
Definisco un dizionario ridotto per l'header delle *subseries*, poi esporto -- per il momento con lo stesso traduttore usato per gli *item*
ts1 = datetime.timestamp(datetime.now())

subSeriesKeys = set()
for ii in range(len(allCs2['subseries'])):
    test = allCs2['subseries'][ii]
    subSeriesKeys = subSeriesKeys.union( traduttoreItem(test).keys() )

subSeriesHeader = OrderedDict()
for key in itemHeader:
    if(key in subSeriesKeys):
        subSeriesHeader[key] = itemHeader[key]


with open(export_dir + "data_subseries.csv", "w", newline="") as csv_file:
    writer = csv.DictWriter(csv_file, fieldnames=list(subSeriesHeader.keys()))
    writer.writeheader()
    writer.writerow(subSeriesHeader)
    for ii in range(len(allCs2['subseries'])):
        test = allCs2['subseries'][ii]
        writer.writerow(traduttoreItem(test))

print('Tempo trascorso:', datetime.timestamp(datetime.now()) - ts1)
Tempo trascorso: 1.3703911304473877
*Rinse & Repeat* con i livelli *series*, *subfonds* e *fonds*
ts1 = datetime.timestamp(datetime.now())

seriesKeys = set()
for ii in range(len(allCs2['series'])):
    test = allCs2['series'][ii]
    seriesKeys = seriesKeys.union( traduttoreItem(test).keys() )

seriesHeader = OrderedDict()
for key in itemHeader:
    if(key in seriesKeys):
        seriesHeader[key] = itemHeader[key]


with open(export_dir + "data_series.csv", "w", newline="") as csv_file:
    writer = csv.DictWriter(csv_file, fieldnames=list(seriesHeader.keys()))
    writer.writeheader()
    writer.writerow(seriesHeader)
    for ii in range(len(allCs2['series'])):
        test = allCs2['series'][ii]
        writer.writerow(traduttoreItem(test))

print('Tempo trascorso:', datetime.timestamp(datetime.now()) - ts1)
Tempo trascorso: 0.11757516860961914
ts1 = datetime.timestamp(datetime.now())

subfondsKeys = set()
for ii in range(len(allCs2['subfonds'])):
    test = allCs2['subfonds'][ii]
    subfondsKeys = subfondsKeys.union( traduttoreItem(test).keys() )

subfondsHeader = OrderedDict()
for key in itemHeader:
    if(key in subfondsKeys):
        subfondsHeader[key] = itemHeader[key]


with open(export_dir + "data_subfonds.csv", "w", newline="") as csv_file:
    writer = csv.DictWriter(csv_file, fieldnames=list(subfondsHeader.keys()))
    writer.writeheader()
    writer.writerow(subfondsHeader)
    for ii in range(len(allCs2['subfonds'])):
        test = allCs2['subfonds'][ii]
        writer.writerow(traduttoreItem(test))

print('Tempo trascorso:', datetime.timestamp(datetime.now()) - ts1)
Tempo trascorso: 0.024317026138305664
ts1 = datetime.timestamp(datetime.now())

fondsKeys = set()
for ii in range(len(allCs2['fonds'])):
    test = allCs2['fonds'][ii]
    fondsKeys = fondsKeys.union( traduttoreItem(test).keys() )

fondsHeader = OrderedDict()
for key in itemHeader:
    if(key in fondsKeys):
        fondsHeader[key] = itemHeader[key]


with open(export_dir + "data_fonds.csv", "w", newline="") as csv_file:
    writer = csv.DictWriter(csv_file, fieldnames=list(fondsHeader.keys()))
    writer.writeheader()
    writer.writerow(fondsHeader)
    for ii in range(len(allCs2['fonds'])):
        test = allCs2['fonds'][ii]
        writer.writerow(traduttoreItem(test))

print('Tempo trascorso:', datetime.timestamp(datetime.now()) - ts1)
Tempo trascorso: 0.002727985382080078
ts1 = datetime.timestamp(datetime.now())

fileKeys = set()
for ii in range(len(allCs2['file'])):
    test = allCs2['file'][ii]
    fileKeys = fileKeys.union( traduttoreItem(test).keys() )

fileHeader = OrderedDict()
for key in itemHeader:
    if(key in fileKeys):
        fileHeader[key] = itemHeader[key]


with open(export_dir + "data_file.csv", "w", newline="") as csv_file:
    writer = csv.DictWriter(csv_file, fieldnames=list(fileHeader.keys()))
    writer.writeheader()
    writer.writerow(fileHeader)
    for ii in range(len(allCs2['file'])):
        test = allCs2['file'][ii]
        writer.writerow(traduttoreItem(test))

print('Tempo trascorso:', datetime.timestamp(datetime.now()) - ts1)
Tempo trascorso: 9.000669002532959
ts1 = datetime.timestamp(datetime.now())

collectionKeys = set()
for ii in range(len(allCs2['collection'])):
    test = allCs2['collection'][ii]
    collectionKeys = collectionKeys.union( traduttoreItem(test).keys() )

collectionHeader = OrderedDict()
for key in itemHeader:
    if(key in collectionKeys):
        collectionHeader[key] = itemHeader[key]


with open(export_dir + "data_collection.csv", "w", newline="") as csv_file:
    writer = csv.DictWriter(csv_file, fieldnames=list(collectionHeader.keys()))
    writer.writeheader()
    writer.writerow(collectionHeader)
    for ii in range(len(allCs2['collection'])):
        test = allCs2['collection'][ii]
        writer.writerow(traduttoreItem(test))

print('Tempo trascorso:', datetime.timestamp(datetime.now()) - ts1)
Tempo trascorso: 0.0027909278869628906
ts1 = datetime.timestamp(datetime.now())

otherlevelKeys = set()
for ii in range(len(allCs2['otherlevel'])):
    test = allCs2['otherlevel'][ii]
    otherlevelKeys = otherlevelKeys.union( traduttoreItem(test).keys() )

otherlevelHeader = OrderedDict()
for key in itemHeader:
    if(key in otherlevelKeys):
        otherlevelHeader[key] = itemHeader[key]


with open(export_dir + "data_otherlevel.csv", "w", newline="") as csv_file:
    writer = csv.DictWriter(csv_file, fieldnames=list(otherlevelHeader.keys()))
    writer.writeheader()
    writer.writerow(otherlevelHeader)
    for ii in range(len(allCs2['otherlevel'])):
        test = allCs2['otherlevel'][ii]
        writer.writerow(traduttoreItem(test))

print('Tempo trascorso:', datetime.timestamp(datetime.now()) - ts1)
Tempo trascorso: 0.134688138961792