Discussione:
[Python] Progetto: Motore conversione tracciati CSV
unknown
2012-01-19 08:22:12 UTC
Permalink
Un saluto a tutti,
volevo parlarvi di un progetto che mi ronza in testa da un po'.
Per lavoro, mi capita spesso di avere a che fare con creazione di file
ascii che rispettano un
tracciato record articolato, tipo tracciati CBI, tracciati per
telematizzazione accise, ecc...

Ho realizzato dei programmini specifici integrati nel gestionale aziendale,
purtroppo in uno squallido
pascal ad oggetti, ma ora vorrei tentare di creare un piccolo motore di
tracciati record che sia modulare e generale.

Mi rendo conto che è una pretesa a dir poco assurda, ma qualche idea l'ho
già buttata su codice python e sembra funzionare.

In pratica sto usando il modulo csv con DictReader e DictWriter per leggere
e scrivere i tracciati.
Ho pensato di avere uno schema modulare di questo tipo per il database:

DB # folder radice
SPESOMETRO # esempio modulo spesometro
data # contiene i dati da elaborare
log # traccia le conversioni effettuate
mappa # contiene la mappa dei campi origine destinazione
output # contiene il file convertito
tracciato # contiene i file che ricostruiscono la struttura del
tracciato ed il tracciato per ogni tipo record

Non uso database, ma leggo e scrivo semplici file di testo.
Una parte più rognosa è la creazione di una parte che gestisca condizioni e
regole da rispettare per i campi del tracciato.
Mi riferisco a cose del tipo: " Se il campo 015 contiene il valore 1 allora
il campo 036 deve essere vuoto..."

Ho scritto già qualcosa, ma prima di sottoporvela, vorrei capire se la cosa
vi interessa e se ovviamente
esiste qualcosa del genere in giro...

Attendo notizie,

Alberto
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20120119/2c80160e/attachment-0001.html>
unknown
2012-01-19 09:40:48 UTC
Permalink
2012/1/19 Alberto Abate <alberto.abate a gmail.com>
Post by unknown
Un saluto a tutti,
volevo parlarvi di un progetto che mi ronza in testa da un po'.
Per lavoro, mi capita spesso di avere a che fare con creazione di file
ascii che rispettano un
tracciato record articolato, tipo tracciati CBI, tracciati per
telematizzazione accise, ecc...
Ciao,
ti dico subito che non lavoro su tale gestione di record, ma leggendo il
tuo post mi è venuto in mente una serie di articoli scritti da Michele
Simionato su stacktrace che più o meno gestiva il tuo stesso tipo di
problema.
Gli articoli sono questi:
1: http://stacktrace.it/2008/05/05/gestione-dei-record-python-1/
2: http://stacktrace.it/2008/05/28/gestione-dei-record-python2/
3: http://stacktrace.it/2008/06/10/gestione-dei-record-python3/

Spero che possa essere di tuo interesse e che affronti il tuo stesso
problema se ho ben capito.
Ciao fabrizio
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20120119/c102c8ba/attachment.html>
unknown
2012-01-19 09:55:03 UTC
Permalink
Non dubitavo che degli eminenti programmatori avessero già trattato questo
tema da principianti...
Grazie, mi immergo nella lettura e vi aggiorno.
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20120119/55efa8fe/attachment.html>
unknown
2012-01-20 13:06:19 UTC
Permalink
Gli articoli sono molto interessanti, anche se belli tosti per me...
Comunque facendo delle prove ho capito che
le namedtuple introdotte nell'articolo, un po' datato in realtà, fanno in
pratica quello che io ottengo da csv.DictReader e csv.DictWriter.
Con poche righe di codice di ha un esempio di lettura e scrittura di un
file csv.

import csv
path = './'
sep = '\t'
f_input = open(path+'dettaglio_2.csv','rb')
f_output = open(path+'dettaglio_2_out.csv','wb')
csvreader = csv.DictReader(f_input,delimiter=sep)
csvwriter = csv.DictWriter(f_output, delimiter=sep,
fieldnames=csvreader.fieldnames)
csvwriter.writerow(row)
Diciamo che questa parte l'ho già affrontata e funziona,
però mi sa che devo fare un passo indietro per progettare bene la struttura
di un tracciato record tramite un database, mi sembra inevitabile.

Creare un database per es. in sqlite3 con le seguenti tabelle:

tab_db(codice,nome,descrizione,data,separatore)
tab_sequenza(codice_db,codice,nome,min,max,posizione,ordine)
tab_gruppo(codice_sequenza,codice,nome,descrizione,note)
tab_campo(codice_db,codice,nome,descrizione)
tab_tipo(codice,nome,descrizione,formattazione,allineamento,decimali,sep_decimali)
tab_tracciato( codice_db,
codice_sequenza,
codice_gruppo,
codice_campo,
codice_tipo,
pos_da,
pos_a,
lunghezza,
valore,
obbligatorio,
vuoto,
visibile,
bloccato
)

Ok, ci aggiorniamo...
Ciao,
ti dico subito che non lavoro su tale gestione di record, ma leggendo il
tuo post mi è venuto in mente una serie di articoli scritti da Michele
Simionato su stacktrace che più o meno gestiva il tuo stesso tipo di
problema.
1: http://stacktrace.it/2008/05/05/gestione-dei-record-python-1/
2: http://stacktrace.it/2008/05/28/gestione-dei-record-python2/
3: http://stacktrace.it/2008/06/10/gestione-dei-record-python3/
Spero che possa essere di tuo interesse e che affronti il tuo stesso
problema se ho ben capito.
Ciao fabrizio
_______________________________________________
Python mailing list
Python a lists.python.it
http://lists.python.it/mailman/listinfo/python
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20120120/01eb7831/attachment-0001.html>
unknown
2012-01-20 15:21:56 UTC
Permalink
Post by unknown
Gli articoli sono molto interessanti, anche se belli tosti per me...
Comunque facendo delle prove ho capito che
le namedtuple introdotte nell'articolo, un po' datato in realtà, fanno
in pratica quello che io ottengo da csv.DictReader e csv.DictWriter.
Con poche righe di codice di ha un esempio di lettura e scrittura di un
file csv.
Secondo me ti può essere utile questo interessante progetto:
http://csvkit.readthedocs.org/en/latest/index.html

Hai tutti gli spunti per gestire i CSV e trasformarli in JSON oppure
fare l'import direttamente verso SQL. In più trovi su GitHub i sorgenti
con gli esempi e ottimi spunti per gestire tutto quanto! :)

Ciao,
Vale
--
Valerio De Carolis - http://www.decabyte.it

"To invent an airplane is nothing. To build an airplane is something.
But to fly ... is everything. - Ferdinand Ferber"
Loading...