[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[riminilug-general] R: [riminilug-general] Risposta tardiva a: "Mi serve uno script"




ciao ragazzi, ho provato anche io qualcosa ma in python3 nonostante non ho il 
file originale da cui estrarre i dati quindi sperando che vada , vi posto il 
codice con i commenti. 

rubrica.py


#-------------------------------------------------------------------------------
# Name:        script rubrica
# Purpose:
#
# Author:      antonino.cardillo
#
# Created:     11/09/2012
# Copyright:   (c) antonino.cardillo 2012
# Licence:     <your licence>

#-------------------------------------------------------------------------------
#!/usr/bin/env python

def main():
    pass
import string
if __name__ == '__main__':
    main()

file_rubrica = open("rubrica.txt","r")   #nome file da leggere da cambiare 
all'occorrenza
lista_rubrica = file_rubrica.read()
file_rubrica.close()
lista_rubrica=str(lista_rubrica)

lista_rubrica=lista_rubrica.split(',') #divido il contenuto del file su ogni 
(,) virgola

y=0
while y<len(lista_rubrica):
    campo=str(lista_rubrica[y])
    campo=campo.replace('<','"')   #sostituisco il simbolo (<) con le 
virgolette (") per avere omogeneo la lista
    campo=campo.replace('>','"')   #sostituisco il simbolo (>) con le 
virgolette (") per avere omogeneo la lista
    lista_rubrica[y]=campo.split('"')   #divido di nuovo il contenuto questa 
volta su ogni (") virgoletta
    x=0
    while x<len(lista_rubrica[y]):
        if lista_rubrica[y][x]=="" or lista_rubrica[y][x]==" " or lista_rubrica
[y][x]==" \n":
            del lista_rubrica[y][x]   # elimino le sottoliste che non 
contengono nulla o uno spazio o un a capo
        x=x+1
    #print(str(lista_rubrica[y]))
    y=y+1
out_file=open('rubrica_new.txt','w')   #apro un nuovo file in scrittura
for n in lista_rubrica:   #ciclo la lista
    campo0=str(n[0])   #prendo il campo 0 della sottolista e li copio nella 
variabile campo0
    campo1=str(n[1])   #prendo il campo 1 della sottolista e li copio nella 
variabile campo0
    riga=campo0.ljust(30) +campo1.ljust(30)+"\n" #formatto i campi 
allineandoli a sinistra ed aggiungendo spazi fino a raggiungere una tabulazione 
30 e vado a capo
    out_file.write(riga) #scrivo la riga nel file
    #print(campo0.ljust(30) ,campo1.ljust(30),"\n")
out_file.close()

>----Messaggio originale----
>Da: andrea.grossi12@xxxxxx
>Data: 10/09/2012 13.16
>A: <riminilug-general@xxxxxxxxxxxx>
>Ogg: [riminilug-general] Risposta tardiva a: &quot;Mi serve uno script&quot;
>
>Ciao a tutti !!
>
>Visto che sono stato "tirato" in ballo..
>
>Da informazioni datemi da Andy Urbi sul tipo di file da 
>passare allo script , ne ho creato uno che avesse le seguenti
>caratteristiche:
>1) File di testo puro (non formattato tipo Open/Libre Office)
>
>2) Il record iniziava con un nominativo racchiuso tra virgolette e,
>   di seguito senza spazi, l'indirizzo e-mail racchiuso tra i
>caratteri minore e maggiore (< > ); di seguito, senza spazi,
> vi era il carattere virgola (,) e uno spazio e poi si ricominciava col
>record successivo.
>
>3) Il file aveva la stessa "cadenza" ripetuta per ogni record.
>
>Esempio: file.csv
>
>"Tizio Tizi"<tiziotizi@xxxxxx>, "Caio Cai"<caiocai@xxxxxx>, "Sempronio
>Semproni"<semproniosemproni@xxxxxx>, 
>"Mario Rossi"<mariorossi@xxxxxx>, "Guido Guidi"<guidoguidi@xxxxxx>, 
>"Cecco Cecchi"<ceccocecchi@xxxxxx>, 
>
>Volevo ottenere questo risultato:
>
>Caio Cai            caiocai@xxxxxx
>Cecco Cecchi        ceccocecchi@xxxxxx
>Guido Guidi         guidoguidi@xxxxxx
>Mario Rossi         mariorossi@xxxxxx
>Sempronio Semproni  semproniosemproni@xxxxxx
>Tizio Tizi          tiziotizi@xxxxxx
>
>Ho aperto un terminale ( Scorciatoia da tastiera CTRL + ALT + T )
>e , avendo il file.csv, ho digitato:
>
>cat file.csv |awk 'BEGIN {RS=", "}{print $0}'|sed -e '/^$/d' > nuovo.csv
>
>in awk 
>-ho impostato la variabile RS (Record Separator) con virgola spazio (, )
>-print $0 stampa l'intero record
>
>in sed
>- ho eliminato le righe vuote e ho salvato il tutto in un nuovo file
>(nuovo.csv)
>
>Eccolo:
>
>"Tizio Tizi"<tiziotizi@xxxxxx>
>"Caio Cai"<caiocai@xxxxxx>
>"Sempronio Semproni"<semproniosemproni@xxxxxx>
>"Mario Rossi"<mariorossi@xxxxxx>
>"Guido Guidi"<guidoguidi@xxxxxx>
>"Cecco Cecchi"<ceccocecchi@xxxxxx>
>
>Poi sempre nel terminale ho digitato:
>
>cat nuovo.csv |sed 's|"<|,|g;s|"||g;s|>||g' >nuovo2.csv
>
>in sed
>- ho sostituito la sequenza "< con il carattere virgola (,)
>- di seguito ho eliminato le virgolette (") e il carattere >
>- è stato creato il file nuovo2.csv (qui di seguito riportato)
>
>Tizio Tizi,tiziotizi@xxxxxx
>Caio Cai,caiocai@xxxxxx
>Sempronio Semproni,semproniosemproni@xxxxxx
>Mario Rossi,mariorossi@xxxxxx
>Guido Guidi,guidoguidi@xxxxxx
>Cecco Cecchi,ceccocecchi@xxxxxx 
>
>Infine ho digitato :
>
>cat nuovo2.csv |column -t -s , |sort > file_finale.csv
>
>in column
>- la -t indica che viene applicato un formato tabella al file
>- la -s indica che il carattere , (virgola) viene utilizzato come
>separatore dei campi del record e li presenta incolonnati. 
>
>sort ordina alfabeticamente (a -> z)
>viene creato il file_finale.csv
>
>Output:
>
>Caio Cai            caiocai@xxxxxx
>Cecco Cecchi        ceccocecchi@xxxxxx
>Guido Guidi         guidoguidi@xxxxxx
>Mario Rossi         mariorossi@xxxxxx
>Sempronio Semproni  semproniosemproni@xxxxxx
>Tizio Tizi          tiziotizi@xxxxxx
>
>N.B. Non sono un informatico e ho impiegato diverso tempo per venirne a
>capo :)
>Sicuramente vi sono metodi più eleganti e raffinati per ottenere la
>stessa cosa.
>
>Anzi chi avesse soluzioni alternative, si faccia avanti !
>
>Vi saluto !
>
>Andrea G.
>
>
>
>
>---------------------------------------------------------------------
>Per cancellarsi, scrivi a: riminilug-general-unsubscribe@xxxxxxxxxxxx
>Se vuoi conoscere altri comandi, scrivi a: riminilug-general-help@riminilug.
it
>
>



---------------------------------------------------------------------
Per cancellarsi, scrivi a: riminilug-general-unsubscribe@xxxxxxxxxxxx
Se vuoi conoscere altri comandi, scrivi a: riminilug-general-help@xxxxxxxxxxxx