Topic: Associare comando di creazione csv in GUI  (Letto 519 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 388
  • Punti reputazione: 0
    • Mostra profilo
Re:Associare comando di creazione csv in GUI
« Risposta #15 il: Aprile 21, 2021, 08:05 »
beh, quello script è impostato in quel modo: lavora sugli spazi, è il problema che avevi posto ;)

p.s. purtroppo non riesco ad allegare il file pdf di prova, ma spero di essere stato chiaro

La struttura del testo estratto è MOLTO importante, se distribuito regolarmente potrebbe ipotizzarsi una struttura di conversione ad intervalli di caratteri, se irregolare ma con spazi di suddivisione sistematicamente più di uno e quelli interni alla stringa singoli può farsi ricorso alle espressioni regolari, altrimenti ... vai ad indovinare!

Tieni presente che è praticamente impossibile implementare un discorso "universale", i computer sono macchine e non possono "adattarsi" alle circostanze, gli umani invece si (teoricamente) ma devono aver presenti i dati reali da manipolare.

Prova a salvare il testo prodotto nel textbox di transito ed allegarlo in un post come codice (ovviamente, offuscando i dati sensibili) e vediamo se si riesce a ridurlo in qualche modo.

Offline marioma86

  • python unicellularis
  • *
  • Post: 16
  • Punti reputazione: 0
    • Mostra profilo
Re:Associare comando di creazione csv in GUI
« Risposta #16 il: Aprile 21, 2021, 10:00 »
Grazie mille @nuzzopippo  ;)

             ORD LIN. RIF.CL         N.PEZZO                      N     DESCRIZIONE          CBAT    LISTINO Q.ORD Q.SER Q.SER Q.SOS MESSAGGIO                                N.LIN.
           105   8700   1K8890   26   01   001   41R   U   PROIETTORE DX          1078      391,94                   1       1        A
           105   8701   1K8890   26   01   001   56R   U   PROIETTORE DX          1078      203,22                   1       1        A
           105   8702   1K8890   26   01   006   97R   U   PROJECTEUR HALOGE      7078      161,14                   1       1        A
           105   8704   1K8890   26   01   033   17R   U   FARO ALOGENO DX        1078      238,82                   2       2        E
           105   8705   1K8890   26   01   034   21R   U   FARO ALOGENO DX        1078      235,28                   1       1        A
           105   8706   1K8890   26   01   045   25R   U   PROJECTEUR D           1078      635,86                   1       1        A
           105   8707   1K8890   26   01   066   24R   U   FARO ALOGENO           1078      229,74                   1       1        A
           105   8708   1K8890   26   01   084   90R   U   PROJECTEUR HALOGE      1078      294,54                   1       1        A
           105   8709   1K8890   26   06   003   73R   U   FARO ALOGENO SX        1078      238,82                   1       1        A
           105   8711   1K8890   26   06   017   32R   U   FARO ALOGENO SX        1078      235,28                   1       1        A
           105   8712   1K8890   26   06   020   78R   U   PROJECTEUR HALOGE      1078      294,54                   1       1        A
           105   8713   1K8890   26   06   037   95R   U   PROJECTEUR HALOGE      7078      159,42                   1       1        A
           105   8714   1K8890   26   06   071   59R   U   BLOCCO OTTICO SX       1078      391,94                   1       1        A
           105   8715   1K8890   26   06   094   54R   U   PROJECTEUR G           1078      552,36                   2       2        E
           105   8717   1K8890   26   16   000   01R   U   RIPETITORE LAT         1078       41,10                   1       1        A
           105   8718   1K8890   26   16   500   02R   U    FRECCIA   LAT SX      1078       41,10                   1       1        A
           105   8719   1K8890   26   16   55J   H0A   U   LAMPE G                7078       25,88                   1       1        A
           105   8720   1K8890   26   16   564   70R   U   FANALINO   LAT SX      1078       28,58                   1       1        A
           105   8724   1K8890   26   55   537   34R   U   FEU AR G   COFFRE      1078      207,36                   1       1        A
           105   8725   1K8890   26   55   537   52R   U   FAN COMB   POST SX     1078       69,22                   1       1        A
           105   8726   1K8890   26   55   556   98R   U   FEU AR G AILE          1078      207,36                   1       1        A
           105   8728   1K8890   26   58   500   07R   U   FARO POST FENDINE      1078       81,30                   1       1        A
           105   8729   1K8890   26   58   551   78R   U   FEND-NEB POST SX       7078       77,08                   1       1        A
           105   8730   1K8890   26   58   552   39R   U   FEU BROUILLARD AR      7078       95,84                   1       1        A
           105   8731   1K8890   26   60   078   64R   U   FARO POSIZ DX          7078       89,32                   1       1        A
           105   8732   1K8890 26     60   510   34R   U   FARO POSIZ SX          7078       92,78                   1       1        A
           105   9001          28     88   161   22R   U   BRAS BALAI COTE C      1028       80,76                   1       1        A
           105   8733   1K8890 62     02   202   29R   U   COLLECTION BOUCLI      1068      432,42                   1       1        A
           105   8734   1K8890 62     02   208   02R   U   PEAU BOUCLIER AV       7068      230,72                   1       1        A
           105   8735   1K8890 62     02   223   03R   U   PEAU BOUCLIER AV       7068      284,11                   1       1        A

come possiamo vedere, il codice articolo contenuto nella colonna "n. pezzo" è nel formato  26   01   001   41R... dovrebbe essere 260100141R

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 388
  • Punti reputazione: 0
    • Mostra profilo
Re:Associare comando di creazione csv in GUI
« Risposta #17 il: Aprile 21, 2021, 17:10 »
Visualizzando i Tuoi dati con un font a passo fisso si vede un allineamento buono, è, quindi, possibile trattare per intervalli di caratteri e "ripulire" degli spazi i vari dati, a parte la sesta colonna, con uno script ad-hoc si fa facilmente, posto un file "dati.txt" contenente i Tuoi dati da trasformare in "dati.csv", questo script
data = []
cutters = [15, 22, 31, 53, 57, 82, 87, 99, 119, 127]
preserve_spaces = [5]
with open('data.txt', 'r') as f:
rows = f.readlines()


for i in range(len(rows)):
if not i:
data.append(';'.join(rows[i].rstrip('\n').split()))
else:
d_row = []
start = 0
for c in cutters:
camp = rows[i][start:c]
if len(d_row) in preserve_spaces:
    camp = camp.lstrip()
    camp = camp.rstrip()
else:
    camp = camp.replace(' ', '')
d_row.append(camp)
start = c
camp = rows[i][c:]
camp.rstrip('\n')
if len(d_row) in preserve_spaces:
    camp = camp.lstrip()
    camp = camp.rstrip()
else:
    camp = camp.replace(' ', '').rstrip('\n')
d_row.append(camp)
data.append(';'.join(d_row))

with open('data.csv', 'w') as f:
    for row in data:
        f.write(row + '\n')

"decifralo" e comprendilo, questo è l'output della sessione :
nuzzo@nuzzo-bax:/media/nuzzo/E9D3-42C1/posts/mauroma$ ls
data.txt  specific_csv.py
nuzzo@nuzzo-bax:/media/nuzzo/E9D3-42C1/posts/mauroma$ python3 specific_csv.py
nuzzo@nuzzo-bax:/media/nuzzo/E9D3-42C1/posts/mauroma$ ls
data.csv  data.txt  specific_csv.py
nuzzo@nuzzo-bax:/media/nuzzo/E9D3-42C1/posts/mauroma$ cat data.csv
ORD;LIN.;RIF.CL;N.PEZZO;N;DESCRIZIONE;CBAT;LISTINO;Q.ORD;Q.SER;Q.SER;Q.SOS;MESSAGGIO;N.LIN.
105;8700;1K8890;260100141R;U;PROIETTORE DX;1078;391,94;1;1;A
105;8701;1K8890;260100156R;U;PROIETTORE DX;1078;203,22;1;1;A
105;8702;1K8890;260100697R;U;PROJECTEUR HALOGE;7078;161,14;1;1;A
105;8704;1K8890;260103317R;U;FARO ALOGENO DX;1078;238,82;2;2;E
105;8705;1K8890;260103421R;U;FARO ALOGENO DX;1078;235,28;1;1;A
105;8706;1K8890;260104525R;U;PROJECTEUR D;1078;635,86;1;1;A
105;8707;1K8890;260106624R;U;FARO ALOGENO;1078;229,74;1;1;A
105;8708;1K8890;260108490R;U;PROJECTEUR HALOGE;1078;294,54;1;1;A
105;8709;1K8890;260600373R;U;FARO ALOGENO SX;1078;238,82;1;1;A
105;8711;1K8890;260601732R;U;FARO ALOGENO SX;1078;235,28;1;1;A
105;8712;1K8890;260602078R;U;PROJECTEUR HALOGE;1078;294,54;1;1;A
105;8713;1K8890;260603795R;U;PROJECTEUR HALOGE;7078;159,42;1;1;A
105;8714;1K8890;260607159R;U;BLOCCO OTTICO SX;1078;391,94;1;1;A
105;8715;1K8890;260609454R;U;PROJECTEUR G;1078;552,36;2;2;E
105;8717;1K8890;261600001R;U;RIPETITORE LAT;1078;41,10;1;1;A
105;8718;1K8890;261650002R;U;FRECCIA   LAT SX;1078;41,10;1;1;A
105;8719;1K8890;261655JH0A;U;LAMPE G;7078;25,88;1;1;A
105;8720;1K8890;261656470R;U;FANALINO   LAT SX;1078;28,58;1;1;A
105;8724;1K8890;265553734R;U;FEU AR G   COFFRE;1078;207,36;1;1;A
105;8725;1K8890;265553752R;U;FAN COMB   POST SX;1078;69,22;1;1;A
105;8726;1K8890;265555698R;U;FEU AR G AILE;1078;207,36;1;1;A
105;8728;1K8890;265850007R;U;FARO POST FENDINE;1078;81,30;1;1;A
105;8729;1K8890;265855178R;U;FEND-NEB POST SX;7078;77,08;1;1;A
105;8730;1K8890;265855239R;U;FEU BROUILLARD AR;7078;95,84;1;1;A
105;8731;1K8890;266007864R;U;FARO POSIZ DX;7078;89,32;1;1;A
105;8732;1K8890;266051034R;U;FARO POSIZ SX;7078;92,78;1;1;A
105;9001;;288816122R;U;BRAS BALAI COTE C;1028;80,76;1;1;A
105;8733;1K8890;620220229R;U;COLLECTION BOUCLI;1068;432,42;1;1;A
105;8734;1K8890;620220802R;U;PEAU BOUCLIER AV;7068;230,72;1;1;A
105;8735;1K8890;620222303R;U;PEAU BOUCLIER AV;7068;284,11;1;1;A
nuzzo@nuzzo-bax:/media/nuzzo/E9D3-42C1/posts/mauroma$

Noterai che sono stati volutamente conservati gli spazi interni della sesta colonna, quella delle descrizioni.

Tal genere di "operazioni", semplici a farle specifiche, comportano una certa complessità progettuale per rendere possibile impostarle tramite una interfaccia grafica ... discorso interessante che Ti sarebbe ottimo quale esercizio.

Personalmente, ho in programma di affrontarlo più in la, al momento mi sto ri-studiando il libro di @RicPol per implementare un visualizzatore base di pdf con wxpython (con tkinter lo ho realizzato e testato domenica)

Offline marioma86

  • python unicellularis
  • *
  • Post: 16
  • Punti reputazione: 0
    • Mostra profilo
Re:Associare comando di creazione csv in GUI
« Risposta #18 il: Aprile 21, 2021, 19:29 »
Grazie @nuzzopippo per il prezioso supporto!
Quindi, vista la complessità su interfaccia grafica, mi consigli id provarlo come una procedura a sè...  ;)

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 388
  • Punti reputazione: 0
    • Mostra profilo
Re:Associare comando di creazione csv in GUI
« Risposta #19 il: Aprile 22, 2021, 07:22 »
Quindi, vista la complessità su interfaccia grafica, mi consigli id provarlo come una procedura a sè...  ;)

Consiglio? No, nessun consiglio, oltre che dal contesto, dipende da Te, da ciò che sai e vuoi fare.
Di per se la "complessità" non è niente di che, basta avere le idee chiare su obiettivi e metodi, rende però intrattabile la faccenda in una serie di post, bisogna camminare in solitaria.

Offline marioma86

  • python unicellularis
  • *
  • Post: 16
  • Punti reputazione: 0
    • Mostra profilo
Re:Associare comando di creazione csv in GUI
« Risposta #20 il: Aprile 24, 2021, 09:01 »
Grazie @nuzzopippo  ;) ;)