Accademia:Lezione 15: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
(Pagina svuotata)
Nessun oggetto della modifica
Riga 1: Riga 1:
 
<pre>
21:49:11] <Stemby> 'sera
[21:49:20] <Stemby> ciao weirdo
[21:49:45] <weirdo> ciao :)
[21:49:52] <Stemby> ok
[21:50:01] <Stemby> dobbiamo uscire tutti, quindi?
[21:50:11] <amosse> Ciao Stemby
[21:50:16] <Stemby> ciao amosse
[21:50:30] <weirdo> stasera magari, non necessariamente ora
[21:50:35] <weirdo> quando finite
[21:50:42] <Stemby> ok, dai, allora stanotte :)
[21:50:47] <Stemby> alle 3 tutti fuori
[21:50:50] <Stemby> :p
[21:51:10] <amosse> ok
[21:51:46] <Stemby> siamo pochini stasera...
[21:52:18] <amosse> si
[21:52:57] <Stemby> che famo? aspettiamo qualche minuto?
[21:53:02] <Stemby> è già tardino
[21:53:06] <weirdo> è scemato l'entusiasmo o èer via della domenica?
[21:53:20] <weirdo> *è per
[21:53:20] <Stemby> boh
[21:53:55] <Stemby> mercoledì scorso c'erano forse tutti
[21:53:56] <amosse> aspettiamo un po'.. come vuoi
[21:53:58] <weirdo> cambiare giorno magari? la gente la domenica va al mare
[21:54:15] <Stemby> il sabato è peggio
[21:54:23] <amosse> si in effetti da ora in poi
[21:54:23] <weirdo> lunedì e giovedì
[21:54:34] <Stemby> ci pensiamo
[21:54:38] <Stemby> sentiamo anche gli altri
[21:54:44] <amosse> potrebbe esser un'idea
[21:54:53] <weirdo> per carità era solo un'idea, non mi intrometto :)
[21:55:03] <weirdo> passavo di qui per caso e ho visto il canale scaduto
[21:55:15] <Stemby> weirdo: ormai sei qui e ci resti
[21:55:16] <Stemby> :p
[21:55:56] <Stemby> cià, spieghiamo questo beneamato input-output su file
[21:56:54] <Stemby> allora, fino ad ora abbiamo visto come elaborare i dti in molti modi diversi
[21:57:20] <Stemby> resta ancora molto da fare, ma abbiamo già un sacco di strumenti con cui si possono fare tante belle cosucce
[21:57:29] <amosse> ok
[21:57:44] <Stemby> il problema è che l'elaborazione dei dati è solo una fase della programmazione
[21:57:51] <Stemby> (senz'altro la più importante)
[21:58:11] <amosse> file di testo?
[21:58:32] <Stemby> altri passaggi però molto importanti sono però la raccolta di questi dati e la loro restituzione
[21:58:41] <Stemby> al momento come abbiamo fatto?
[21:58:49] <Stemby> *finora
[21:59:01] <amosse> input()
[21:59:17] <amosse> per ricevere i dati
[21:59:21] <Stemby> ok
[21:59:50] <Stemby> e sostanzialmente print() per restituire quelli elaborati
[21:59:53] <Stemby> giusto?
[22:00:02] <amosse> chiaro
[22:00:16] <Stemby> qual è il limite?
[22:00:37] <amosse> dimenzioni?
[22:00:45] <Stemby> beh, indirettamente
[22:00:56] <Stemby> diciamo che questo schema va bene per piccole cose
[22:01:12] <Stemby> l'utente inserisce a manina i dati, e legge i risultati
[22:01:31] <Stemby> ovviamente se i dati sono tanti, il sistema non funziona
[22:01:45] <Stemby> è tutto troppo "labile"
[22:02:02] <Stemby> per questo molto spesso ci si appoggia al disco rigido
[22:02:15] <Stemby> per tenere i dati (voluminosi) da parte
[22:02:24] <amosse> ok
[22:02:29] <Stemby> sia dati grezzi, che dati elaborati
[22:02:48] <Stemby> sul disco rigido i dati possono essere salvati in vari modi
[22:02:58] <Stemby> stasera vediamo il più semplice:
[22:03:09] <Stemby> input/output su file di testo puro
[22:03:12] <Stemby> ok?
[22:03:16] <amosse> ok
[22:04:07] --> spirit (~spirit@Azzurra-C3C291C.104-82-b.business.telecomitalia.it) has joined #debianizzati-corsi
[22:04:08] <Stemby> allora
[22:04:13] <Stemby> ciao spirit
[22:04:20] <spirit> ciao a tutti
[22:04:21] <Stemby> bene arrivato :)
[22:04:26] <Stemby> stiamo iniziando or ora
[22:04:29] <amosse> Ciao spirit
[22:04:32] <spirit> ah bene
[22:04:35] <spirit> ciao
[22:04:40] <Stemby> ho solo fatto una piccola introduzione sull'argomento di stasera
[22:05:00] <Stemby> i giorni scorsi ho dato un'occhiata alla documentazione ufficiale
[22:05:11] <Stemby> le cose migliori le si trovano nel tutorial
[22:05:20] <Stemby> http://docs.python.org/release/3.1.3/tutorial/index.html
[22:06:05] <Stemby> in particolare, come si vede dall'indice generale, capitolo 7
[22:06:26] <Stemby> quello che ci interessa è qui: http://docs.python.org/release/3.1.3/tutorial/inputoutput.html#reading-and-writing-files
[22:06:50] <Stemby> alcuni dettagli forse vi sfuggiranno, al momento
[22:07:05] <Stemby> capirete meglio quando faremo la programmazione orientata agli oggetti
[22:07:16] <Stemby> comunque è relativamente semplice
[22:07:39] <Stemby> anche perché i metodi li abbiamo già trovati con altri oggetti predefiniti
[22:07:43] <Stemby> vi ricordate?
[22:07:49] <Stemby> spirit: cos'è un metodo?
[22:07:54] <amosse> ok
[22:08:32] <Stemby> spirit: ti ricordi?
[22:08:37] <spirit> un attimo
[22:09:35] <spirit> qualcosa appartenente ad una classe..ma non ricordo bene
[22:10:03] <Stemby> :)
[22:10:21] <Stemby> è giusto, ma le classi non le abbiamo ancora fatte
[22:10:37] <Stemby> amosse: in parole semplici?
[22:10:52] <amosse> funzione applicata ad un oggetto?
[22:11:06] <Stemby> sì, più o meno
[22:11:26] <Stemby> è simile ad una funzione, ma agisce SU un oggetto
[22:11:47] <Stemby> spirit: ti ricordi ora?
[22:12:01] <spirit> si
[22:12:09] <Stemby> ne abbiamo visti a bizzeffe, quando abbiamo fatto gli oggetti predefiniti
[22:12:25] <Stemby> spirit: com'è la sintassi generale?
[22:12:55] <spirit> def()
[22:13:12] <Stemby> eh, quello non lo sai ancora fare
[22:13:23] <Stemby> sai scrivere una funzione, non un metodo
[22:13:28] <Stemby> chiedevo invece:
[22:13:40] <Stemby> come si chiama (con che sintassi si chiama) un metodo?
[22:13:54] <Stemby> ti ricordi?
[22:14:12] <Stemby> per chiamare una funzione, semplicemente:
[22:14:15] <Stemby> nomefunzione()
[22:14:19] <Stemby> giusto?
[22:14:25] <Stemby> invece, per chiamare un metodo?
[22:14:58] <Stemby> amosse?
[22:15:18] <amosse> oggetto.metodo()
[22:15:23] <Stemby> esatto
[22:15:30] <Stemby> per fortuna che c'è amosse
[22:15:37] <Stemby> spirit: ti ricordi ora?
[22:15:44] <spirit> si stavo per dirlo
[22:15:54] <spirit> :)
[22:15:54] <Stemby> allora fammi un esempio reale
[22:16:01] <Stemby> di un metodo che ti ricordi
[22:16:17] <Stemby> *della chiamata di un metodo che ti ricordi
[22:17:23] <spirit> nome_metodo = xy
[22:17:28] <Stemby> no
[22:17:37] <Stemby> un metodo predefinito
[22:17:51] <Stemby> uno tra i millemila che sono presenti nella libreria standard
[22:18:30] <Stemby> ad esempio: ti ricordi cos'è una lista?
[22:18:44] <spirit> una sequenza di caratteri
[22:18:49] <Stemby> no...
[22:18:54] <spirit> ah no la stringa
[22:18:58] <Stemby> quella è una stringa
[22:19:00] <Stemby> esatto
[22:19:06] <Stemby> va bene anche una stringa
[22:19:21] <Stemby> ti ricordi un metodo predefinito per le stringhe?
[22:20:07] <Stemby> io pensavo alle liste, perché c'è un metodo che si usa molto spesso
[22:20:20] <spirit> str.format() per esempio?
[22:20:31] <Stemby> sì, quello è un metodo
[22:20:32] <Stemby> ok
[22:20:34] <Stemby> :)
[22:20:42] <Stemby> ti sei salvato in extremis :p
[22:21:08] <Stemby> io pensavo a:
[22:21:13] <Stemby> lst.append()
[22:21:22] <Stemby> direi che è il metodo che si usa più spesso
[22:21:30] <spirit> ricordo si
[22:21:36] <Stemby> oppure, per le stringhe:
[22:21:40] <Stemby> str.split()
[22:22:00] <Stemby> amosse, te ne ricordi qualcun altro?
[22:22:28] <amosse> str.upper()
[22:22:32] <Stemby> ok
[22:22:34] <Stemby> ottimo
[22:22:37] <Stemby> e così via
[22:22:44] <Stemby> ce ne sono a bizzeffe
[22:23:01] <Stemby> diciamo che la cosa più difficile di Python è proprio sapere cosa si ha a disposizione
[22:23:13] <Stemby> perché c'è già _tutto_
[22:23:31] <Stemby> per sapere dove... occorre scartabellare nella doc
[22:23:32] <Stemby> :)
[22:23:37] <amosse> ok
[22:23:50] <Stemby> allora, tornando ai file
[22:24:12] <Stemby> diciamo che tutto ruota attorno all'oggetto che si genera con
[22:24:16] <Stemby> open()
[22:24:19] <Stemby> ok?
[22:24:26] <amosse> ok
[22:24:35] <spirit> (a fine lezione vi indico un tutoria carino fatto dall' università)
[22:24:44] <Stemby> come dicevo, vi sarà più chiaro quando faremo la programmazione orientato agli oggetti
[22:25:01] <Stemby> per il momento prendetelo come se fosse una funzione
[22:25:13] <Stemby> che restituisce un oggetto
[22:25:17] <Stemby> ok?
[22:25:21] <amosse> ok
[22:25:46] <Stemby> come vedete nella doc, questa "funzione" prende 2 parametri
[22:26:09] <Stemby> ricordatevi, e fissatevelo in testa indelebilmente:
[22:26:22] <Stemby> questi due parametri sono due STRINGHE
[22:26:24] <Stemby> ok?
[22:26:37] <amosse> ok
[22:26:50] <Stemby> in questo modo vi ricordate a memoria la sintassi
[22:27:04] <Stemby> il nome della funzione è semplice: open()
[22:27:09] <Stemby> i parametri sono 2
[22:27:14] <Stemby> sono 2 stringhe
[22:27:23] <Stemby> ok?
[22:27:32] <amosse> ok
[22:27:37] <Stemby> spirit?
[22:28:03] <spirit> stavo leggendo il tutorial
[22:28:09] <Stemby> segui me
[22:28:16] <Stemby> poi lo leggerai con calma :=
[22:28:18] <Stemby> :)
[22:28:22] <spirit> ok
[22:28:28] <Stemby> fin lì ci sei?
[22:28:45] <spirit> si
[22:28:49] <Stemby> cosa fa questa funzione?
[22:29:11] <Stemby> (chiamiamola funzione, per questa sera, anche se è improprio)
[22:29:27] <Stemby> abbiamo detto che restituisce un...
[22:29:33] <spirit> oggetto
[22:29:35] <Stemby> ok
[22:29:44] <Stemby> allora vediamo cos'è questo oggetto
[22:29:56] <Stemby> l'oggetto è una modellizzazione del nostro file
[22:30:07] <Stemby> del file che stiamo aprendo
[22:30:28] <Stemby> è una rappresentazione pitonesca del file in questione, ok?
[22:30:39] <amosse> ok
[22:31:04] <Stemby> in altre parole, tutte le operazioni che vengono fatte su questo oggetto, in realtà vengono fatte sul file
[22:31:29] <Stemby> l'oggetto tecnicamente è un oggetto di tipo file
[22:31:37] <Stemby> http://docs.python.org/release/3.1.3/glossary.html#term-file-object
[22:31:51] <Stemby> è un nuovo tipo predefinito
[22:32:07] <Stemby> ne abbiamo già visti tanti: stringhe, liste, dizionari, range, ecc.
[22:32:28] <Stemby> ora aggiungiamo al nostro bagaglio tecnico gli oggetti di tipo file
[22:33:03] <Stemby> aprite la console
[22:33:16] <amosse> ok
[22:33:57] <Stemby> >>> open('/tmp/workfile', 'w')
[22:33:57] <Stemby> <_io.TextIOWrapper name='/tmp/workfile' mode='w' encoding='UTF-8'>
[22:34:02] <Stemby> visto?
[22:34:18] <spirit> si
[22:34:32] <Stemby> vediamo cosa abbiamo fatto
[22:35:01] <Stemby> fate così
[22:35:12] <Stemby> dal terminale di sistema (bash):
[22:35:19] <Stemby> ls /tmp
[22:35:53] <Stemby> vedrete che c'è un file che si chiama workfile
[22:35:56] <Stemby> visto?
[22:36:02] <spirit> si
[22:36:07] <amosse> ok
[22:36:17] <Stemby> quello è il file che abbiamo creato poco fa
[22:36:30] <Stemby> in realtà il contenuto è vuoto
[22:36:36] <Stemby> potete provare, se volete
[22:36:45] <Stemby> cat /tmp/workfile
[22:36:50] <Stemby> (sempre da bash)
[22:37:05] <Stemby> visto?
[22:37:19] <spirit> è vuoto
[22:37:24] <Stemby> esatto
[22:37:27] <Stemby> infatti:
[22:37:30] <Stemby> ls -l /tmp/
[22:37:36] <Stemby> vedrete che occupa 0 byte
[22:37:58] <Stemby> ok?
[22:38:05] <spirit> ok
[22:38:18] <amosse> ok
[22:38:19] <Stemby> bon, allora analizziamo un po' meglio quello che abbiamo digitato
[22:38:32] <Stemby> intanto i 2 parametri
[22:38:41] <Stemby> (le 2 stringhe)
[22:38:50] <Stemby> la prima stringa è chiara, no?
[22:39:01] <amosse> si
[22:39:10] <amosse> scusa
[22:39:31] <amosse> se il file era presente, con lo stesso comando lo aprivo?
[22:39:39] <Stemby> no
[22:39:44] <Stemby> lo vediamo tra un attimo
[22:39:49] <amosse> ok
[22:40:04] <Stemby> intanto, spirit, ti è chiaro il primo parametro?
[22:40:53] <Stemby> spirit... un po' più svelto, per favore, altrimenti impieghiamo le ore
[22:41:02] <Stemby> se non ti è chiaro dillo, che rispiego
[22:41:11] <spirit> si
[22:41:17] <Stemby> ok
[22:41:23] <Stemby> è semplicemente il nome del fine
[22:41:26] <Stemby> *file
[22:41:33] <Stemby> come STRINGA
[22:41:40] <Stemby> (ricordatevi le virgolette)
[22:41:50] <amosse> incluso il percorso
[22:42:03] <Stemby> cosa importante: accetta percorsi sia assoluti che relativi
[22:42:25] <Stemby> quindi se non anteponete il percorso, verrà creato un file nella directory in cui vi trovate
[22:42:40] <amosse> ok
[22:42:40] <Stemby> il concetto di percorso assoluto o relativo è chiaro per tutti?
[22:42:57] <Stemby> amosse?
[22:42:57] <spirit> non tanto
[22:43:12] <Stemby> weirdo: lo vuoi spiegare tu?
[22:43:19] <amosse> meglio rispiegare un attimo
[22:43:30] <Stemby> così mi riposo un attimo
[22:44:16] <Stemby> http://it.wikipedia.org/wiki/Percorso
[22:44:21] <Stemby> lì c'è qualcosa
[22:44:33] <Stemby> ma mi sembra un po' troppo win-centrico
[22:44:37] <Stemby> non che cambi molto
[22:44:44] <Stemby> cià, lo spiego a parole mie
[22:44:49] <Stemby> percorso assoluto:
[22:44:56] <Stemby> su Unix è molto semplice
[22:45:03] <weirdo> :P
[22:45:09] <Stemby> TUTTO il filesistem ha un'origine
[22:45:12] <Stemby> quale?
[22:45:23] <amosse> root
[22:45:27] <Stemby> ("filesystem" è chiaro?)
[22:45:31] <Stemby> amosse: esatto
[22:45:38] <Stemby>  /
[22:45:46] <amosse> ok
[22:45:48] <Stemby> quella è l'origine del filesystem
[22:45:57] <Stemby> spirit: ci sei?
[22:46:00] <weirdo> non sono bravo a spiegare le cose
[22:46:02] <spirit> si ci sono
[22:46:16] <Stemby> quello lo sapevi?
[22:46:21] <spirit> si
[22:46:25] <Stemby> ok
[22:46:36] <Stemby> dicevo che su Unix è tutto più semplice proprio per quel motivo
[22:46:52] <Stemby> TUTTI i file di sistema avranno un percorso assoluto che parte da lì
[22:46:55] <Stemby> dalla radice
[22:47:07] <Stemby> non importa fisicamente dove si trovino
[22:47:18] <Stemby> (disco fisso, chiavetta USB, rete, ecc.)
[22:47:45] <Stemby> tutto viene montato in un unico filesystem, che ha appunto questa struttura ad albero che parte dalla radice
[22:48:14] <Stemby> dunque, se vogliamo trovare un file, basta conoscere questo percorso
[22:48:17] <Stemby> esempio:
[22:48:33] <Stemby> /home/pippo/Documenti/TopSecret.txt
[22:48:36] <Stemby> ok?
[22:48:46] <amosse> ok
[22:48:48] <spirit> ok
[22:48:51] <weirdo> mi sarei limitato forse a: prova  cat /tmp/workfile  e poi prova  cd / && cat ../tmp/workfile
[22:48:59] <weirdo> un po' criptico
[22:49:02] <Stemby> :)
[22:49:19] <weirdo> e ho pure sbagliato
[22:49:20] <Stemby> bon, quello è il percorso assoluto
[22:49:39] <weirdo> cat /tmp/workfile  e    cd /media/ && cat ../tmp/workfile
[22:49:49] <Stemby> il percorso relativo invece, come dice il nome stesso, è un percorso che parte da dove ci si trova
[22:50:21] <amosse> ok
[22:50:36] <Stemby> ad esempio, se ci si trova in /home/pippo/, il percorso relativo del file di prima quale sarà?
[22:51:23] <spirit> /home/pippo/Documenti/TopSecret.txt
[22:51:32] <Stemby> no, quello è il percorso assoluto
[22:51:37] <Stemby> amosse?
[22:52:12] <spirit> cd home
[22:52:17] <Stemby> ?
[22:52:21] <Stemby> sono già lì
[22:52:28] <Stemby> in home/pippo/
[22:52:33] <Stemby> *
[22:52:36] <Stemby> /home/pippo
[22:52:42] <Stemby> ok?
[22:52:57] <amosse> ok
[22:53:04] <Stemby> se io sono l'utente pippo, avrò il prompt fatto così, con ogni probabilità:
[22:53:31] <Stemby> pippo@miamacchina:~$
[22:53:38] <Stemby> giusto?
[22:53:43] <amosse> ok
[22:53:43] <spirit> giusto
[22:53:46] <Stemby> con ~ che significa?
[22:53:57] <amosse> home
[22:54:05] <Stemby> /home/pippo/
[22:54:11] <Stemby> la home dell'utente
[22:54:14] <Stemby> ok?
[22:54:17] <amosse> ok
[22:54:21] <spirit> ok
[22:54:21] <Stemby> bon
[22:54:25] <Stemby> io sono lì
[22:54:32] <Stemby> se faccio
[22:54:34] <Stemby> ls
[22:54:41] <Stemby> vedrò tanti file e cartelle
[22:54:47] <Stemby> tra cui:
[22:54:52] <Stemby> Documenti/
[22:54:54] <Stemby> giusto?
[22:55:00] <amosse> ok
[22:55:01] <spirit> giusto
[22:55:10] <Stemby> e sappiamo che dentro a quella cartella c'è il nosto file
[22:55:18] <Stemby> come lo visualizziamo?
[22:55:40] <spirit> con cat o less file
[22:55:52] <Stemby> fammi l'esempio concreto
[22:55:56] <amosse> il nostro file é in /temp
[22:56:02] <Stemby> il nome del file lo conosci
[22:56:07] <spirit> less /tmp/workfile
[22:56:13] <Stemby> no
[22:56:16] <amosse> non in /home
[22:56:26] <Stemby> il file TopSecret.txt dell'esempio precedente
[22:56:33] <Stemby> (è un file inventato)
[22:56:41] <Stemby> ma ne conoscete il percorso assoluto
[22:56:49] <Stemby> e sapete dove vi trovate
[22:56:50] <spirit> less /home/pippo/Documenti/TopSecret.txt
[22:56:58] <Stemby> ok
[22:57:06] <Stemby> così hai usato il percorso assoluto
[22:57:15] <Stemby> ma si possono risparmiare tanti caratteri
[22:57:16] <Stemby> come?
[22:57:30] <Stemby> ricordatevi: siete in ~
[22:57:38] <Stemby> amosse?
[22:57:49] <weirdo> che pazienza :)
[22:57:59] <amosse> less /Documenti/TopSecret.txt
[22:58:13] <Stemby> no
[22:58:21] <Stemby> se fai così dà errore
[22:58:31] <amosse> less Documenti/TopSecret.txt
[22:58:39] <Stemby> oh
[22:58:41] <Stemby> esatto
[22:58:51] <Stemby> quello è il percorso relativo!
[22:59:00] <spirit> ok
[22:59:09] <Stemby> attenzione a non anteporre la barra
[22:59:17] <amosse> mettiamo che TopSecret é in '/'
[22:59:19] <Stemby> altrimenti avrete il percorso ASSOLUTO
[22:59:30] <amosse> e noi ci troviamo in /home
[22:59:30] <Stemby> amosse: c'è qualcosa che non va
[22:59:48] <Stemby> in i file di testo non bisogna metterli :p
[22:59:50] <Stemby> in /
[23:00:10] <Stemby> però facciamo finta di aver disobbedito a tutte le regole di buonsenso
[23:00:23] <amosse> ok
[23:00:27] <Stemby> e abbiamo: /TopSecret.txt
[23:00:29] <Stemby> ok?
[23:00:38] <spirit> ok
[23:00:41] <amosse> ok
[23:00:45] <weirdo> ok
[23:00:47] <Stemby> un dannatissimo file di testo nella directory root
[23:00:56] <Stemby> e ci troviamo in /home/
[23:01:00] <Stemby> come visualizzarlo?
[23:01:06] <amosse> esatto
[23:01:11] <Stemby> entrano in gioco delle directory speciali
[23:01:15] <Stemby> (vistuali)
[23:01:29] <Stemby> che vedete sempre ogni volta che fate ls
[23:01:32] <Stemby> sono 2
[23:01:36] <Stemby> una si chiama .
[23:01:41] <Stemby> l'altra si chiama ..
[23:01:46] <Stemby> ok?
[23:01:55] <amosse> ok
[23:01:56] <spirit> ok
[23:02:05] <Stemby> . è la dir corrente
[23:02:26] <Stemby> infatti per lanciare uno script che avete reso eseguibile come fate?
[23:02:34] <Stemby> ./mioscript.py
[23:02:36] <Stemby> giusto?
[23:02:41] <amosse> ok
[23:02:41] <Stemby> cosa significa?
[23:03:01] <Stemby> ./ significa proprio "qui"
[23:03:09] <Stemby> la directory corrente
[23:03:26] <amosse> ok
[23:03:29] <Stemby> invece .. che cos'è?
[23:03:37] <Stemby> è la directory precedente
[23:03:44] <amosse> ok
[23:03:51] <Stemby> quella che viene subito prima, partendo da /
[23:04:05] <Stemby> quindi se siamo in /home/pippo/
[23:04:12] <Stemby> ../ sarà /home(
[23:04:17] <Stemby> /home/
[23:04:20] <Stemby> ok?
[23:04:36] <amosse> ok
[23:04:37] <spirit> ok
[23:04:38] <Stemby> se siamo in /home/, ../ sarà /
[23:04:43] <Stemby> infatti:
[23:04:52] <Stemby> andate in ~
[23:04:58] <Stemby> (nella vostra home)
[23:05:05] <Stemby> basta fare:
[23:05:09] <Stemby> cd <invio>
[23:05:11] <Stemby> ok?
[23:05:23] <Stemby> ci siete?
[23:05:35] <spirit> si
[23:05:41] <amosse> quindi per passare alla dir precedente:
[23:05:46] <amosse> ../
[23:05:46] <Stemby> cd ..
[23:06:06] <spirit> ok
[23:06:09] <Stemby> e dove siete finiti?
[23:06:19] <spirit> in home
[23:06:23] <Stemby> esatto
[23:06:26] <Stemby> se fate di nuovo
[23:06:29] <Stemby> cd ..
[23:06:32] <Stemby> ?
[23:06:43] <amosse> '/'
[23:06:47] <Stemby> esatto
[23:06:51] <Stemby> in root
[23:06:55] <Stemby> ok?
[23:06:59] <amosse> ok
[23:07:03] <Stemby> ora torniamo all'esempio di amosse
[23:07:08] <Stemby> siete in /home/
[23:07:13] <Stemby> volete vedere:
[23:07:38] <Stemby>  /TopSecret.txt
[23:07:41] <Stemby> come fate?
[23:07:47] <Stemby> (usando il percorso relativo)
[23:08:00] <amosse> ../TopSecret.txt
[23:08:13] <Stemby> cat ../TopSecret.txt
[23:08:17] <amosse> ok
[23:08:18] <Stemby> o less
[23:08:21] <amosse> sorry
[23:08:29] <Stemby> d'accordo?
[23:08:33] <amosse> ok
[23:08:37] <spirit> si
[23:08:40] <Stemby> credevo queste cose fossero assodate
[23:08:55] <amosse> ok
[23:09:02] <weirdo> e invece tornando all'esmpio iniziale del file /tmp/workfile, come ci arrivate da /home/pippo ? :)
[23:09:03] <Stemby> vabbé, un piccolo ripassino di concetti di base sulla nostra shell :)
[23:09:09] <spirit> io no sapevo dei ../
[23:09:26] <amosse> solo per chiarire
[23:09:31] <Stemby> allora:
[23:09:35] <Stemby> percorso assoluto:
[23:09:53] <Stemby> less /tmp/workfile
[23:10:00] <Stemby> percorso relativo:
[23:10:15] <Stemby> less ../../tmp/workfile
[23:10:15] <amosse> cat ../../TopSecret.txt
[23:10:33] <Stemby> ok?
[23:10:42] <amosse> si volevo dire la stessa cosa, ok.
[23:10:42] <spirit> ok
[23:10:49] <Stemby> bon
[23:10:56] <Stemby> ora sapete TUTTO :p
[23:11:21] <Stemby> vantaggi/svantaggi
[23:11:25] <Stemby> pensateci un attimo
[23:12:03] <amosse> percorso assoluto: si digita più testo
[23:12:09] <Stemby> non è detto
[23:12:13] <amosse> ma é più chiaro
[23:12:22] <amosse> é vero
[23:12:29] <Stemby> però è più rigido
[23:12:33] <Stemby> nel senso:
[23:12:55] <Stemby> è più "sicuro" perché non dipende da dove ci si trova al momento
[23:13:20] <Stemby> quindi, ad esempio, per aiutare qualcuno in chat o sul forum, in genere si preferisce usare i percorsi assokuti
[23:13:23] <Stemby> *assoluti
[23:13:46] <Stemby> perché almeno si è sicuri di beccare quei file, ovunque l'utente da aiutare si trovi
[23:14:02] <Stemby> però fate attenzione su python:
[23:14:13] <Stemby> python è nato come linguaggio multipiattaforma
[23:14:24] <Stemby> i percorsi assoluti funzionano su Unix
[23:14:36] <Stemby> ma sono ben diversi dai percorsi assoluti su win
[23:14:52] <Stemby> inceve i percorsi relativi funzionano ovunque allo stesso modo
[23:14:55] <amosse> ok
[23:14:56] <Stemby> ok?
[23:15:11] <amosse> ok
[23:15:12] <Stemby> piccola parentesi
[23:15:24] <Stemby> su win le barre delle directory sono al contrario
[23:15:32] <amosse> si
[23:15:35] <Stemby> C:\dir\altradir
[23:15:39] <Stemby> ok?
[23:15:46] <amosse> ok
[23:15:48] <Stemby> su Unix invece sono diritte
[23:15:53] <Stemby> /root/pippo/
[23:15:58] <amosse> ok
[23:16:05] <spirit> ok
[23:16:15] <Stemby> quando usate i percorsi in python, usate la sintassi Unix
[23:16:25] <amosse> ok
[23:16:35] <Stemby> se il programma viene eseguito su win, penserà python stesso a girare le barre
[23:16:42] <Stemby> ovvero:
[23:16:52] <Stemby> l'interfaccia di programmazione segue lo stile Unix
[23:17:03] <amosse> ok
[23:17:18] <Stemby> poi sarà l'interprete a trovare i file al posto giusto, indipendentemente dal sistema su cui gira
[23:17:28] <Stemby> bon
[23:17:46] <spirit> (io uso solo linux)
[23:17:50] <Stemby> con questo abbiamo esaurito il primo parametro di open()
[23:18:15] <Stemby> spirit: sì, ma non è detto che i tuoi programmi non vengano fatti girare altrove
[23:18:24] <Stemby> su questo bisogna stare molto attenti
[23:18:38] <spirit> vero hai ragione
[23:18:41] <Stemby> tutti noi siamo portati a pensare: chissenefrega degli altri
[23:18:50] <Stemby> che usino Debian anche loro
[23:19:00] <Stemby> però è un atteggiamento a mio avviso sbagliato
[23:19:24] <Stemby> dunque la prima regola del buon pitonista è: scrivi SEMPRE codice multipiattaforma
[23:19:43] <amosse> a tale proposito dove suggerisci di salvare i moduli?
[23:19:44] <Stemby> anche solo per te stesso: è una buona palestra comunque
[23:19:53] <Stemby> dove volete
[23:20:08] <Stemby> al momento comunque in un ramo di /home
[23:20:13] <Stemby> es:
[23:20:23] <Stemby> /home/pippo/python
[23:20:25] <Stemby> oppure
[23:20:33] <Stemby> /home/pippo/script
[23:20:36] <Stemby> oppure
[23:20:47] <Stemby> /home/pippo/prove
[23:20:50] <Stemby> dove vi pare
[23:20:52] <amosse> ok
[23:21:01] <Stemby> solo evitate di sporcare il filesystem
[23:21:11] <Stemby> nella vostra home fate le schifezze che volete
[23:21:20] <Stemby> evitate di andare altrove :)
[23:22:07] <Stemby> poi, per fare le cose per bene, i programmi finiti andrebbero impacchettati
[23:22:29] <Stemby> ma questo è molto lontano ancora :)
[23:22:35] <Stemby> allora
[23:22:41] <Stemby> secondo parametro
[23:23:09] <Stemby> http://docs.python.org/release/3.1.3/library/functions.html#open
[23:23:19] <Stemby> ecco, lì trovate la sintassi completa
[23:23:41] <Stemby> come vedete ci sono molti altri parametri, ma hanno già tutti un valore di default
[23:23:52] <Stemby> il parametro che ci interessa è mode
[23:23:58] <Stemby> (il secondo)
[23:24:08] <Stemby> come vedete ha anc'esso un valore di default
[23:24:10] <Stemby> quale?
[23:24:32] <Stemby> *anch'esso
[23:24:40] <amosse> r
[23:24:54] <Stemby> 'r'
[23:24:58] <Stemby> è una stringa!
[23:25:02] <Stemby> :)
[23:25:05] <Stemby> ok?
[23:25:07] <amosse> sorry
[23:25:12] <Stemby> questo cosa significa?
[23:25:20] <amosse> lettura
[23:25:25] <amosse> solo lettura
[23:25:34] <Stemby> che se non indichiamo il secondo parametro, il file verrà solo letto
[23:25:43] <Stemby> quindi:
[23:25:45] <amosse> ok
[23:25:55] <Stemby> open('pippo.txt', 'r')
[23:26:01] <Stemby> è del tutto equivalente a:
[23:26:12] <Stemby> open('pippo.txt')
[23:26:16] <Stemby> d'accordo?
[23:26:31] <amosse> ok
[23:26:43] <Stemby> agli altri parametri dateci un'occhiata, ma alla fine non li userete mai
[23:26:49] <Stemby> invece il secondo è importante
[23:26:56] <Stemby> guardate la tabellina
[23:26:59] <Stemby> tutto chiaro?
[23:27:19] <Stemby> un attimo
[23:27:33] <Stemby> della tabella, vi interessano in realtà solo le prime 3 righe
[23:27:45] <Stemby> 'r', 'w', 'a'
[23:27:58] <Stemby> le altre possibilità credo che non le userete mai
[23:28:10] <Stemby> o comunque, se vi servissero, sapete dove trovarle
[23:28:13] <Stemby> ok?
[23:28:18] <amosse> ok
[23:28:21] <spirit> ok
[23:28:27] <Stemby> 'r', 'w', 'a' son chiari?
[23:28:54] <amosse> 'a' -> scrive alla file del file?
[23:28:58] <Stemby> esatto
[23:29:04] <amosse> ok
[23:29:07] <Stemby> e come quando in bash si fa >>
[23:29:11] <Stemby> hai presente?
[23:29:21] <Stemby> aggiunge al file
[23:29:33] <amosse> ah
[23:29:47] <Stemby> è come 'w', solo che non cancella il contenuto, se esiste
[23:29:56] <amosse> ok
[23:30:01] <Stemby> aggiunge nuovo contenuto in coda al file
[23:30:10] <Stemby> d'accordo?
[23:30:16] <amosse> ok
[23:30:19] <Stemby> quindi, riassumendo:
[23:30:24] <Stemby> sappiamo aprire un file
[23:30:30] <Stemby> quale funzione si usa?
[23:30:41] <Stemby> (anche la doc la chiama funzione, quindi mi allineo :) )
[23:30:49] <amosse> open()
[23:30:52] <Stemby> esatto
[23:31:06] <Stemby> abbiamo visto che il primo parametro è il percorso
[23:31:23] <Stemby> abbiamo visto il secondo parametro: la modalità di apertura
[23:31:30] <amosse> ok
[23:31:31] <Stemby> lettura o scrittura
[23:31:42] <Stemby> per la scrittura: 'w' o 'a'
[23:31:52] <Stemby> abbiamo visto la differenza tra le 2
[23:32:01] <Stemby> bon, direi che il grosso è fatto
[23:32:08] <Stemby> ora dobbiamo fare un po' di pratica
[23:32:16] <Stemby> tornando al tutorial:
[23:32:54] <Stemby> come vedete come esempio introduttivo dice questo:
[23:32:57] <Stemby> >>> f = open('/tmp/workfile', 'w')
[23:33:00] <Stemby> visto?
[23:33:20] <amosse> ok
[23:33:40] <Stemby> questo perché come dicevo, con open otteniamo un oggetto
[23:34:01] <Stemby> e come tutti gli oggetti, se vogliamo elaborarli spesso conviene raccoglierli in una variabile
[23:34:11] <Stemby> altrimenti, una volta ottenuto, lo si perde
[23:34:13] <Stemby> ok?
[23:34:19] <amosse> ok
[23:34:29] <Stemby> nella prova che abbiamo fatto prima, abbiamo creato un file vuoto
[23:34:41] <Stemby> ora non possiamo fare altro
[23:34:48] <Stemby> peché quell'oggetto è andato perduto
[23:36:04] <amosse> perché perduto...
[23:36:12] <amosse> il file é ancora la
[23:36:18] <Stemby> sì
[23:36:27] <Stemby> ma non hai più loggetto
[23:36:32] <Stemby> è come quando fai:
[23:36:39] <Stemby> >>> 3 + 1
[23:37:05] <amosse> devi ricreare l' oggetto per collegarti al file
[23:37:16] <Stemby> sì
[23:37:21] <Stemby> ma tanto vale farlo subito
[23:37:40] <Stemby> è inutile creare un file vuoto
[23:37:44] <Stemby> no?
[23:37:50] <amosse> chiaro
[23:38:11] <Stemby> bon
[23:38:22] <Stemby> allora
[23:38:29] <Stemby> adesso recupero un file
[23:38:35] <Stemby> e proviamo a giocarci
[23:41:07] <Stemby> http://paste.debian.net/115701/
[23:41:21] <Stemby> credo che i diritti siano scaduti :p
[23:41:24] <Stemby> bon
[23:41:33] <Stemby> salvatelo da qualche parte
[23:41:55] <Stemby> anzi, lo carico su gobby
[23:42:01] <Stemby> poi salvatelo
[23:42:15] <amosse> ok
[23:42:46] <Stemby> salvato?
[23:43:53] <amosse> ok
[23:43:57] <Stemby> spirit?
[23:44:01] <spirit> si, ma non da gobby, che non lo trovo
[23:44:07] <Stemby> ?
[23:44:12] <Stemby> basta salvare
[23:44:22] <Stemby> comuque poco importa
[23:44:25] <spirit> ah trovato..
[23:44:30] <Stemby> basta che tu ce l'abbia
[23:44:51] <spirit> ok
[23:44:52] <Stemby> dante.txt
[23:44:55] <Stemby> ok
[23:45:03] <amosse> ok
[23:45:19] <Stemby> dalla directory in cui si trova il file, accedete all'interfaccia interattiva
[23:45:46] <Stemby> fatto?
[23:46:24] <amosse> ok
[23:46:26] <spirit> si
[23:47:04] <Stemby> bon
[23:47:06] <Stemby> allora
[23:47:32] <Stemby> create un oggetto file che rappresenti il file che avete salvato, in lettura
[23:48:14] <Stemby> fatto?
[23:48:49] <Stemby> spirit?
[23:48:54] <Stemby> amosse?
[23:49:06] <amosse> un min
[23:49:18] <Stemby> è una riga di codice...
[23:50:05] <Stemby> ci siete?
[23:50:21] <spirit> ...
[23:50:21] <amosse>  f = open('dante.txt') Traceback (most recent call last):  File "<stdin>", line 1, in <module> IOError: [Errno 2] No such file or directory: 'dante.txt'
[23:50:38] <Stemby> non trova il file
[23:50:42] <amosse> eppure il file c'è...
[23:50:47] <Stemby> 1) hai usato un altro nome
[23:51:02] <Stemby> 2) hai lanciato python3 da un'altra directory
[23:51:09] <Stemby> non vedo altre possibilità
[23:51:16] <spirit> a me lo trova
[23:51:38] <amosse> un minuto
[23:51:59] <amosse> in Documenti della mia home ho
[23:52:03] <amosse> dante.txt
[23:52:06] <Stemby> ok
[23:52:08] <Stemby> quindi:
[23:52:15] <Stemby> cd ~/Documenti
[23:52:17] <Stemby> python3
[23:52:25] <amosse> fatto
[23:52:36] <amosse> non capisco
[23:52:45] <Stemby> scusa
[23:52:46] <Stemby> esci
[23:52:49] <Stemby> cd ~/Documenti
[23:52:51] <Stemby> ci sei
[23:52:52] <Stemby> ?
[23:53:20] <amosse> ok
[23:53:20] <amosse> funziona
[23:53:26] <Stemby> oh
[23:53:28] <Stemby> bon
[23:53:33] <Stemby> spirit: chiaro fin qui?
[23:53:44] <Stemby> la sintassi usata da amosse è la più sintetica possibile
[23:53:58] <Stemby> se fate:
[23:54:01] <Stemby> >>> f
[23:54:13] <Stemby> dovreste vedere il vostro oggetto
[23:54:15] <Stemby> giusto?
[23:54:16] <spirit> si
[23:54:26] <amosse> ok
[23:54:35] <Stemby> ricapitolando
[23:54:52] <Stemby> spirit: mi spieghi quella riga di codice?
[23:55:06] <Stemby> f = open('dante.txt')
[23:55:22] <Stemby> ci son tanti concetti in quei pochi caratteri
[23:55:44] <spirit> 1) variabile f
[23:55:53] <Stemby> ok
[23:55:56] <Stemby> =
[23:56:32] <Stemby> assegnazione del valore di un oggetto alla variabile
[23:56:34] <Stemby> ok?
[23:56:45] <spirit> si
[23:56:49] <Stemby> poi, la parte pià succosa, è quella dopo l'=
[23:56:49] <amosse> ok
[23:57:01] <Stemby> spiegamela
[23:57:41] <spirit> poi ci dovrebbe esssere la funzione open con il nostro oggetto
[23:58:00] <Stemby> no, è proprio la funzione open che genera l'oggetto
[23:58:27] <Stemby> <_io.TextIOWrapper name='dante.txt' mode='r' encoding='UTF-8'>
[23:58:38] <spirit> ok (mi spiego male...)
[23:58:45] <Stemby> questo è il prodotto della funzione che abbiamo lanciato
[23:58:56] <Stemby> d'accordo?
[23:59:01] <spirit> si
[23:59:04] <Stemby> poi?
[23:59:11] <Stemby> dimmi 2 parole sui parametri
[23:59:52] <spirit> abbiamo la stringa 'dante.txt' che è l'oggetto
[23:59:57] <Stemby> no
[00:00:00] - {Day changed to lun mag 2 00:00:00 2011}
[00:00:05] <Stemby> non è l'oggetto
[00:00:21] <spirit> è il file
[00:00:22] <Stemby> o meglio, essendo una stringa è sì un oggetto, ma come tutte le cose in python
[00:00:25] <Stemby> esatto
[00:00:30] <Stemby> è il nome del file
[00:00:36] <Stemby> scritto come?
[00:00:45] <Stemby> come percorso...
[00:00:54] <spirit> giusto
[00:00:57] <Stemby> come percorso...
[00:01:00] <Stemby> ...
[00:01:08] <spirit> assoluto
[00:01:11] <Stemby> no!
[00:01:21] <Stemby> relativo!
[00:01:28] <spirit> scusa
[00:01:30] <Stemby> assoluto sarebbe stato:
[00:01:47] <Stemby> '/home/spirit/Documenti/dante.txt'
[00:01:51] <Stemby> o quel che l'è
[00:02:00] <spirit> ok
[00:02:03] <Stemby> ricordati:
[00:02:16] <Stemby> i percorsi assoluti iniziano SEMPRE con una barra
[00:02:21] <Stemby> (almeno su Unix)
[00:02:37] <spirit> ok
[00:02:42] <Stemby> perché bisogna partire dalla radice e risalire l'albero, seguendo i rami corretti
[00:03:10] <Stemby> bon
[00:03:12] <Stemby> poi?
[00:03:17] <Stemby> hai da aggiungere altro?
[00:03:36] <Stemby> <_io.TextIOWrapper name='dante.txt' mode='r' encoding='UTF-8'>
[00:03:38] <spirit> poi il 2° parametro mode = 'r'
[00:03:42] <Stemby> esatto
[00:03:48] <Stemby> non è stato specificato
[00:03:52] <spirit> che ci indica la sola lettura
[00:03:58] <Stemby> esatto
[00:04:09] <Stemby> poi, come vedete, l'encoding è UTF-8
[00:04:17] <Stemby> è lo standard su Debian
[00:04:25] <amosse> ok
[00:04:34] <spirit> che è la codifica giusto?
[00:04:39] <Stemby> fate attenzione ai file provenienti da altri sistemi, che potrebbero essere codificati in altro modo
[00:04:46] <Stemby> sì, esatto
[00:05:11] <Stemby> comunque, di default la codifica è UTF-8
[00:05:26] <Stemby> se vi arrivassero file codificati in modo barbaro:
[00:05:34] <Stemby> 1) ve lo fate rispedire come si deve
[00:05:45] <Stemby> 2) lo convertite in UTF-8
[00:06:08] <amosse> come si convertono in file?
[00:06:12] <Stemby> 3) scrivete un programma che gestisca la codifica del tizio che vi ha mandato il file
[00:06:32] <Stemby> amosse: mah, immagino ci siano degli script
[00:06:42] <Stemby> in ogni caso apri con l'editor che vuoi
[00:07:03] <Stemby> imposti la codifica
[00:07:28] <amosse> ok
[00:07:34] <Stemby> controlli che accenti e caratteri strani siano a posto
[00:07:50] <Stemby> e salvi a questo punto una copia usando questa volta UTF-8 come codifica
[00:07:58] <amosse> ok
[00:08:02] <Stemby> gedit, kate, ecc. fanno tranquillamente questa cosa
[00:08:12] <amosse> ok
[00:08:38] <Stemby> la terza opzione la eviterei
[00:08:53] <Stemby> (credo sia un parametro di open(), se vi interessa)
[00:08:55] <amosse> chiaro
[00:09:09] <Stemby> però sarebbe ora di passare tutti a UTF-8
[00:09:27] <Stemby> quindi appoggerei soprattutto le opzioni 1 e 2
[00:09:29] <Stemby> ok?
[00:09:36] <amosse> ok
[00:10:08] <Stemby> bon, allora giochiamo un po' col nostro oggetto
[00:10:25] <Stemby> come vi dicevo, lo abbiamo tenuto da parte in una variabile
[00:10:41] <Stemby> altrimenti a questo punto sarebbe già morto, e non potremmo più farci niente
[00:10:43] <Stemby> ok?
[00:10:51] <amosse> ok
[00:10:52] <Stemby> f è il nosto oggetto
[00:10:52] <spirit> ok
[00:11:04] <Stemby> possiamo farci un po' di cosucce.
[00:11:18] <Stemby> http://docs.python.org/release/3.1.3/tutorial/inputoutput.html#reading-and-writing-files
[00:11:40] <Stemby> come d'abitudine, abbiamo a disposizione un bel po' di metodi già belli e pronti
[00:11:57] <Stemby> ad esempio il metodo read()
[00:12:10] <Stemby> mi sembra abbastanza autoesplicativo
[00:12:14] <Stemby> provatelo
[00:12:37] <amosse> >>> f.read()
[00:12:44] <Stemby> esatto
[00:12:46] <Stemby> visto?
[00:12:51] <amosse> 'Nel mezzo del cammin di nostra vita\nmi ritrovai per una selva oscura,\nché la diritta via era smarrita.\n'
[00:12:57] <Stemby> esatto
[00:13:02] <amosse> non va a capo
[00:13:10] <Stemby> legge tutto il contenuto del file e lo caccia in una stringa
[00:13:14] <Stemby> sì che va a capo
[00:13:18] <Stemby> a modo suo
[00:13:22] <Stemby> ma va a capo
[00:13:24] <Stemby> leggi bene
[00:13:25] <Stemby> :)
[00:13:32] <amosse> con \n
[00:13:35] <Stemby> esatto
[00:13:45] <Stemby> se fai print(.....)
[00:13:52] <Stemby> vedrai il risultato come vuoi tu
[00:13:53] <amosse> giusto
[00:14:15] <Stemby> però attento
[00:14:20] <Stemby> ora non funziona più
[00:14:27] <amosse> infatti
[00:14:31] <Stemby> perché è arrivato in fondo al file
[00:14:50] <Stemby> se ripeti f.read() vedrai che otterrai una stringa vuota
[00:15:27] <Stemby> dobbiamo riportare il "cursore" all'inizio
[00:15:36] <Stemby> per far questo si usa il metodo seek()
[00:15:36] <amosse> vero
[00:16:01] <Stemby> attenzione che vuole un parametro
[00:16:06] <amosse> oppure ricreo l'oggetto?
[00:16:07] <Stemby> il parametro è un intero
[00:16:12] <Stemby> nooo!!!
[00:16:18] <Stemby> che sprecone!
[00:16:20] <Stemby> :)
[00:16:25] <Stemby> dicevo
[00:16:27] <amosse> ok
[00:16:28] <Stemby> il parametro è un intero
[00:16:50] <Stemby> che rappresenta il byte del file a cui andare
[00:17:00] <amosse> 1 -> riga 1?
[00:17:04] <Stemby> byte
[00:17:07] <Stemby> cos'è un byte?
[00:17:10] <Stemby> ...
[00:17:14] <Stemby> ta dam...
[00:17:32] <Stemby> qui casca il pitonista
[00:17:33] <amosse> un numero int
[00:17:41] <Stemby> in informatica
[00:17:42] <amosse> 0 - 255
[00:17:43] <Stemby> cos'è un byte?
[00:17:59] <amosse> non lo so
[00:18:09] <Stemby> grossolanamente è un carattere
[00:18:27] <Stemby> usando la tabella ascii questo è senz'altro vero
[00:18:43] <Stemby> usando unicode non è proprio così vero
[00:18:51] <Stemby> non sempre, per lo meno
[00:18:53] <Stemby> comunque
[00:19:08] <Stemby> noi dobbiamo tornare a prima della prima lettera
[00:19:10] <Stemby> quindi?
[00:19:23] <spirit> (un byte è formato da 8 bit se non sbaglio)
[00:19:34] <Stemby> quasi sempre sì
[00:19:39] <amosse> f.seek(0)
[00:19:39] <Stemby> scolasticamente sì
[00:19:43] <Stemby> esatto!
[00:19:56] <Stemby> a questo punto possiamo rilanciare read()
[00:20:00] <Stemby> fate delle prove
[00:20:06] <Stemby> con read()
[00:20:14] <Stemby> print(f.read())
[00:20:21] <Stemby> con seek()
[00:20:28] <Stemby> mettendo vari numeri
[00:20:30] <Stemby> ok?
[00:20:40] <Stemby> giocate qualche minuto con questi metodi
[00:20:48] <Stemby> spirit: tu ci sei?
[00:21:04] <spirit> si ci sono
[00:21:37] <spirit> con seek basta un qualsiasi numero'
[00:21:44] <spirit> giusto?
[00:21:46] <Stemby> 0 per tornare all'inizio
[00:21:52] <Stemby> 1 per saltare la prima lettera
[00:22:03] <Stemby> 2 per saltare le prime 2
[00:22:04] <Stemby> ecc.
[00:22:10] <spirit> ok
[00:22:12] <amosse> chiaro
[00:22:27] <Stemby> è come riavvolgere un nastro
[00:22:28] <Stemby> :)
[00:22:45] <amosse> slicing
[00:22:49] <amosse> non esiste
[00:23:06] <amosse> riavvolgo una fetta
[00:23:11] <amosse> ?
[00:23:27] <Stemby> beh, puoi fare tutti gli affettamenti che vuoi sulla stringa che ottieni
[00:23:45] <Stemby> ricordati: read() restituisce una stringa
[00:23:57] <Stemby> poi su quella stringa puoi farci tutto cià che vuoi
[00:24:07] <amosse> ok
[00:24:11] <Stemby> ormai dovreste essere in grado di farci parecchie cosucce
[00:24:26] <Stemby> bon
[00:24:31] <Stemby> altro metodo:
[00:24:49] <Stemby> readline()
[00:24:51] <Stemby> provate
[00:25:32] <Stemby> provate ovviamente a lanciarlo più volte
[00:25:45] <spirit> errore
[00:25:49] <Stemby> quale?
[00:26:04] <spirit> readline(2)
[00:26:08] <spirit> Traceback (most recent call last):                File "<stdin>", line 1, in <module>
[00:26:17] <Stemby> senza parametri
[00:27:02] <Stemby> soprattutto: è un metodo
[00:27:05] <Stemby> non una funzione
[00:27:13] <Stemby> altrimenti ovviamente non lo trova
[00:27:25] <Stemby> spirit: ci sei?
[00:27:32] <spirit> readline(2)                                  errore
[00:27:36] <spirit> ops
[00:27:38] <Stemby> è un metodo
[00:27:40] <spirit> da errore
[00:27:42] <Stemby> spirit: ci sei?
[00:27:45] <Stemby> è un metodo
[00:27:46] <Stemby> è un metodo
[00:27:46] <Stemby> è un metodo
[00:27:47] <Stemby> è un metodo
[00:27:48] <Stemby> è un metodo
[00:27:55] <amosse> l'argomento di read() indica il n° del carettere..
[00:27:55] <spirit> ok
[00:28:02] <Stemby> che cos'è un metodo?
[00:28:10] <Stemby> amosse: sì, anche di readline()
[00:28:29] <amosse> >>> f.readline(4)
[00:28:34] <Stemby> oh!
[00:28:39] <amosse> 'Nel '
[00:28:43] <Stemby> esatto
[00:28:46] <Stemby> rilancialo
[00:29:10] <Stemby> magari con un numero un po' più grande
[00:29:14] <Stemby> tipo:
[00:29:20] <Stemby> f.readline(10)
[00:29:24] <Stemby> ok?
[00:29:29] <amosse> ok
[00:29:35] <Stemby> comunque, di solito lo si usa senza parametri
[00:29:39] <Stemby> f.readline()
[00:29:42] <amosse> lette i primi 10 caratteri
[00:29:51] <amosse> *legge
[00:29:55] <Stemby> ...e poi altri 10, se lo rilandi
[00:29:55] <amosse> ok
[00:30:01] <Stemby> *rilanci
[00:30:06] <amosse> ok
[00:30:15] <Stemby> senza parametri restituisce una riga alla volta
[00:30:40] <Stemby> poi, arrivato in fondo al file, come read() restiutuisce una stringa vuota
[00:30:44] <Stemby> seak()
[00:30:49] <Stemby> e riavvolgi :)
[00:30:51] <Stemby> ok?
[00:30:55] <Stemby> provate ancora un po'
[00:30:56] <amosse> chiaro
[00:31:12] <Stemby> con/senza parametri
[00:32:20] <Stemby> spirit: ci sei?
[00:32:29] <spirit> si provavo
[00:32:32] <Stemby> ok
[00:32:36] <Stemby> tutto chiaro?
[00:32:49] <spirit> si credo di si
[00:32:52] <Stemby> ultimo metodo:
[00:32:55] <Stemby> readlines()
[00:32:55] <amosse> ok
[00:33:00] <Stemby> con la s
[00:33:25] <Stemby> chiaro?
[00:33:37] <Stemby> spirit: spiega
[00:33:47] <spirit> spezza
[00:33:48] <Stemby> che cosa fa il metodo readlines()?
[00:33:54] <Stemby> restituisce...
[00:34:03] <Stemby> la...
[00:34:06] <Stemby> l...
[00:34:10] <Stemby> i...
[00:34:10] <spirit> lista
[00:34:15] <Stemby> delle
[00:34:19] <amosse> righe
[00:34:21] <Stemby> ok!
[00:34:23] <Stemby> :)
[00:34:29] <Stemby> tutto chiaro?
[00:34:35] <amosse> una domanda
[00:34:40] <Stemby> arrivati in fondo → lista vuota
[00:34:45] <Stemby> seek()
[00:34:49] <Stemby> e da capo :)
[00:34:59] <Stemby> dimmi amosse
[00:35:09] <amosse> voglio estrapolare i primi 5 caratteri di ogni riga?
[00:35:22] <Stemby> mah, ci son varie soluzioni
[00:35:35] <Stemby> la più banale:
[00:35:54] <Stemby> for line in f.readlines():
[00:36:21] <Stemby>    print(line[6])
[00:36:29] <Stemby> o quel che vuoi, al posto di print
[00:36:40] <amosse> ok
[00:36:40] <Stemby> non son sicuro che sia molto efficiente
[00:36:48] <Stemby> comunque senz'altro funziona
[00:37:31] <Stemby> sorry
[00:37:42] <Stemby> print(line[:6])
[00:37:45] <Stemby> ovviamente :)
[00:38:03] <amosse> ok
[00:38:07] <Stemby> anzi
[00:38:10] <Stemby> print(line[:5])
[00:38:20] <Stemby> ok, questo è quello giusto :)
[00:38:46] <Stemby> bon, sulla lettura dei file non c'è molto altro
[00:38:48] <Stemby> provate
[00:39:01] <Stemby> per la scrittura, speravo di fare stasera ma è tardi
[00:39:07] <amosse> ok
[00:39:10] <spirit> ok
[00:39:12] <Stemby> direi che potete provare autonomamente
[00:39:16] <Stemby> seguite il tutorial
[00:39:22] <amosse> ok
[00:39:26] <Stemby> se ci son problemi, vediamo la prossima volta
[00:39:29] <Stemby> ATTENZIONE
[00:39:41] <Stemby> quando scrivete un file che esiste, LO CANCELLATE
[00:39:51] <amosse> ok
[00:39:54] <Stemby> quindi non fate stupidate
[00:40:07] <Stemby> usate solo file che potete buttare senza pensieri
[00:40:14] <amosse> ok
[00:40:33] <Stemby> ok spirit?
[00:40:39] <Stemby> esercitati, mi raccomando
[00:40:42] <spirit> si
[00:40:45] <Stemby> notte
[00:40:54] <amosse> Notte e grazie.
[00:41:05] <spirit> ciao grazie buonanotte
[00:41:18] <amosse> Ciao spirit
[00:41:24] <amosse> Notte.
[00:41:27] <spirit> notte amosse
[00:41:40] <spirit> notte </pre>

Versione delle 17:32, 6 mag 2011

21:49:11] <Stemby> 'sera
[21:49:20] <Stemby> ciao weirdo
[21:49:45] <weirdo> ciao :)
[21:49:52] <Stemby> ok
[21:50:01] <Stemby> dobbiamo uscire tutti, quindi?
[21:50:11] <amosse> Ciao Stemby
[21:50:16] <Stemby> ciao amosse
[21:50:30] <weirdo> stasera magari, non necessariamente ora
[21:50:35] <weirdo> quando finite
[21:50:42] <Stemby> ok, dai, allora stanotte :)
[21:50:47] <Stemby> alle 3 tutti fuori
[21:50:50] <Stemby> :p
[21:51:10] <amosse> ok
[21:51:46] <Stemby> siamo pochini stasera...
[21:52:18] <amosse> si
[21:52:57] <Stemby> che famo? aspettiamo qualche minuto?
[21:53:02] <Stemby> è già tardino
[21:53:06] <weirdo> è scemato l'entusiasmo o èer via della domenica?
[21:53:20] <weirdo> *è per
[21:53:20] <Stemby> boh
[21:53:55] <Stemby> mercoledì scorso c'erano forse tutti
[21:53:56] <amosse> aspettiamo un po'.. come vuoi
[21:53:58] <weirdo> cambiare giorno magari? la gente la domenica va al mare
[21:54:15] <Stemby> il sabato è peggio
[21:54:23] <amosse> si in effetti da ora in poi
[21:54:23] <weirdo> lunedì e giovedì
[21:54:34] <Stemby> ci pensiamo
[21:54:38] <Stemby> sentiamo anche gli altri
[21:54:44] <amosse> potrebbe esser un'idea
[21:54:53] <weirdo> per carità era solo un'idea, non mi intrometto :)
[21:55:03] <weirdo> passavo di qui per caso e ho visto il canale scaduto
[21:55:15] <Stemby> weirdo: ormai sei qui e ci resti
[21:55:16] <Stemby> :p
[21:55:56] <Stemby> cià, spieghiamo questo beneamato input-output su file
[21:56:54] <Stemby> allora, fino ad ora abbiamo visto come elaborare i dti in molti modi diversi
[21:57:20] <Stemby> resta ancora molto da fare, ma abbiamo già un sacco di strumenti con cui si possono fare tante belle cosucce
[21:57:29] <amosse> ok
[21:57:44] <Stemby> il problema è che l'elaborazione dei dati è solo una fase della programmazione
[21:57:51] <Stemby> (senz'altro la più importante)
[21:58:11] <amosse> file di testo?
[21:58:32] <Stemby> altri passaggi però molto importanti sono però la raccolta di questi dati e la loro restituzione
[21:58:41] <Stemby> al momento come abbiamo fatto?
[21:58:49] <Stemby> *finora
[21:59:01] <amosse> input()
[21:59:17] <amosse> per ricevere i dati
[21:59:21] <Stemby> ok
[21:59:50] <Stemby> e sostanzialmente print() per restituire quelli elaborati
[21:59:53] <Stemby> giusto?
[22:00:02] <amosse> chiaro
[22:00:16] <Stemby> qual è il limite?
[22:00:37] <amosse> dimenzioni?
[22:00:45] <Stemby> beh, indirettamente
[22:00:56] <Stemby> diciamo che questo schema va bene per piccole cose
[22:01:12] <Stemby> l'utente inserisce a manina i dati, e legge i risultati
[22:01:31] <Stemby> ovviamente se i dati sono tanti, il sistema non funziona
[22:01:45] <Stemby> è tutto troppo "labile"
[22:02:02] <Stemby> per questo molto spesso ci si appoggia al disco rigido
[22:02:15] <Stemby> per tenere i dati (voluminosi) da parte
[22:02:24] <amosse> ok
[22:02:29] <Stemby> sia dati grezzi, che dati elaborati
[22:02:48] <Stemby> sul disco rigido i dati possono essere salvati in vari modi
[22:02:58] <Stemby> stasera vediamo il più semplice:
[22:03:09] <Stemby> input/output su file di testo puro
[22:03:12] <Stemby> ok?
[22:03:16] <amosse> ok
[22:04:07] --> spirit (~spirit@Azzurra-C3C291C.104-82-b.business.telecomitalia.it) has joined #debianizzati-corsi
[22:04:08] <Stemby> allora
[22:04:13] <Stemby> ciao spirit
[22:04:20] <spirit> ciao a tutti
[22:04:21] <Stemby> bene arrivato :)
[22:04:26] <Stemby> stiamo iniziando or ora
[22:04:29] <amosse> Ciao spirit
[22:04:32] <spirit> ah bene
[22:04:35] <spirit> ciao
[22:04:40] <Stemby> ho solo fatto una piccola introduzione sull'argomento di stasera
[22:05:00] <Stemby> i giorni scorsi ho dato un'occhiata alla documentazione ufficiale
[22:05:11] <Stemby> le cose migliori le si trovano nel tutorial
[22:05:20] <Stemby> http://docs.python.org/release/3.1.3/tutorial/index.html
[22:06:05] <Stemby> in particolare, come si vede dall'indice generale, capitolo 7
[22:06:26] <Stemby> quello che ci interessa è qui: http://docs.python.org/release/3.1.3/tutorial/inputoutput.html#reading-and-writing-files
[22:06:50] <Stemby> alcuni dettagli forse vi sfuggiranno, al momento
[22:07:05] <Stemby> capirete meglio quando faremo la programmazione orientata agli oggetti
[22:07:16] <Stemby> comunque è relativamente semplice
[22:07:39] <Stemby> anche perché i metodi li abbiamo già trovati con altri oggetti predefiniti
[22:07:43] <Stemby> vi ricordate?
[22:07:49] <Stemby> spirit: cos'è un metodo?
[22:07:54] <amosse> ok
[22:08:32] <Stemby> spirit: ti ricordi?
[22:08:37] <spirit> un attimo
[22:09:35] <spirit> qualcosa appartenente ad una classe..ma non ricordo bene
[22:10:03] <Stemby> :)
[22:10:21] <Stemby> è giusto, ma le classi non le abbiamo ancora fatte
[22:10:37] <Stemby> amosse: in parole semplici?
[22:10:52] <amosse> funzione applicata ad un oggetto?
[22:11:06] <Stemby> sì, più o meno
[22:11:26] <Stemby> è simile ad una funzione, ma agisce SU un oggetto
[22:11:47] <Stemby> spirit: ti ricordi ora?
[22:12:01] <spirit> si
[22:12:09] <Stemby> ne abbiamo visti a bizzeffe, quando abbiamo fatto gli oggetti predefiniti
[22:12:25] <Stemby> spirit: com'è la sintassi generale?
[22:12:55] <spirit> def()
[22:13:12] <Stemby> eh, quello non lo sai ancora fare
[22:13:23] <Stemby> sai scrivere una funzione, non un metodo
[22:13:28] <Stemby> chiedevo invece:
[22:13:40] <Stemby> come si chiama (con che sintassi si chiama) un metodo?
[22:13:54] <Stemby> ti ricordi?
[22:14:12] <Stemby> per chiamare una funzione, semplicemente:
[22:14:15] <Stemby> nomefunzione()
[22:14:19] <Stemby> giusto?
[22:14:25] <Stemby> invece, per chiamare un metodo?
[22:14:58] <Stemby> amosse?
[22:15:18] <amosse> oggetto.metodo()
[22:15:23] <Stemby> esatto
[22:15:30] <Stemby> per fortuna che c'è amosse
[22:15:37] <Stemby> spirit: ti ricordi ora?
[22:15:44] <spirit> si stavo per dirlo
[22:15:54] <spirit> :)
[22:15:54] <Stemby> allora fammi un esempio reale
[22:16:01] <Stemby> di un metodo che ti ricordi
[22:16:17] <Stemby> *della chiamata di un metodo che ti ricordi
[22:17:23] <spirit> nome_metodo = xy
[22:17:28] <Stemby> no
[22:17:37] <Stemby> un metodo predefinito
[22:17:51] <Stemby> uno tra i millemila che sono presenti nella libreria standard
[22:18:30] <Stemby> ad esempio: ti ricordi cos'è una lista?
[22:18:44] <spirit> una sequenza di caratteri
[22:18:49] <Stemby> no...
[22:18:54] <spirit> ah no la stringa
[22:18:58] <Stemby> quella è una stringa
[22:19:00] <Stemby> esatto
[22:19:06] <Stemby> va bene anche una stringa
[22:19:21] <Stemby> ti ricordi un metodo predefinito per le stringhe?
[22:20:07] <Stemby> io pensavo alle liste, perché c'è un metodo che si usa molto spesso
[22:20:20] <spirit> str.format() per esempio?
[22:20:31] <Stemby> sì, quello è un metodo
[22:20:32] <Stemby> ok
[22:20:34] <Stemby> :)
[22:20:42] <Stemby> ti sei salvato in extremis :p
[22:21:08] <Stemby> io pensavo a:
[22:21:13] <Stemby> lst.append()
[22:21:22] <Stemby> direi che è il metodo che si usa più spesso
[22:21:30] <spirit> ricordo si
[22:21:36] <Stemby> oppure, per le stringhe:
[22:21:40] <Stemby> str.split()
[22:22:00] <Stemby> amosse, te ne ricordi qualcun altro?
[22:22:28] <amosse> str.upper()
[22:22:32] <Stemby> ok
[22:22:34] <Stemby> ottimo
[22:22:37] <Stemby> e così via
[22:22:44] <Stemby> ce ne sono a bizzeffe
[22:23:01] <Stemby> diciamo che la cosa più difficile di Python è proprio sapere cosa si ha a disposizione
[22:23:13] <Stemby> perché c'è già _tutto_
[22:23:31] <Stemby> per sapere dove... occorre scartabellare nella doc
[22:23:32] <Stemby> :)
[22:23:37] <amosse> ok
[22:23:50] <Stemby> allora, tornando ai file
[22:24:12] <Stemby> diciamo che tutto ruota attorno all'oggetto che si genera con
[22:24:16] <Stemby> open()
[22:24:19] <Stemby> ok?
[22:24:26] <amosse> ok
[22:24:35] <spirit> (a fine lezione vi indico un tutoria carino fatto dall' università)
[22:24:44] <Stemby> come dicevo, vi sarà più chiaro quando faremo la programmazione orientato agli oggetti
[22:25:01] <Stemby> per il momento prendetelo come se fosse una funzione
[22:25:13] <Stemby> che restituisce un oggetto
[22:25:17] <Stemby> ok?
[22:25:21] <amosse> ok
[22:25:46] <Stemby> come vedete nella doc, questa "funzione" prende 2 parametri
[22:26:09] <Stemby> ricordatevi, e fissatevelo in testa indelebilmente:
[22:26:22] <Stemby> questi due parametri sono due STRINGHE
[22:26:24] <Stemby> ok?
[22:26:37] <amosse> ok
[22:26:50] <Stemby> in questo modo vi ricordate a memoria la sintassi
[22:27:04] <Stemby> il nome della funzione è semplice: open()
[22:27:09] <Stemby> i parametri sono 2
[22:27:14] <Stemby> sono 2 stringhe
[22:27:23] <Stemby> ok?
[22:27:32] <amosse> ok
[22:27:37] <Stemby> spirit?
[22:28:03] <spirit> stavo leggendo il tutorial
[22:28:09] <Stemby> segui me
[22:28:16] <Stemby> poi lo leggerai con calma :=
[22:28:18] <Stemby> :)
[22:28:22] <spirit> ok
[22:28:28] <Stemby> fin lì ci sei?
[22:28:45] <spirit> si
[22:28:49] <Stemby> cosa fa questa funzione?
[22:29:11] <Stemby> (chiamiamola funzione, per questa sera, anche se è improprio)
[22:29:27] <Stemby> abbiamo detto che restituisce un...
[22:29:33] <spirit> oggetto
[22:29:35] <Stemby> ok
[22:29:44] <Stemby> allora vediamo cos'è questo oggetto
[22:29:56] <Stemby> l'oggetto è una modellizzazione del nostro file
[22:30:07] <Stemby> del file che stiamo aprendo
[22:30:28] <Stemby> è una rappresentazione pitonesca del file in questione, ok?
[22:30:39] <amosse> ok
[22:31:04] <Stemby> in altre parole, tutte le operazioni che vengono fatte su questo oggetto, in realtà vengono fatte sul file
[22:31:29] <Stemby> l'oggetto tecnicamente è un oggetto di tipo file
[22:31:37] <Stemby> http://docs.python.org/release/3.1.3/glossary.html#term-file-object
[22:31:51] <Stemby> è un nuovo tipo predefinito
[22:32:07] <Stemby> ne abbiamo già visti tanti: stringhe, liste, dizionari, range, ecc.
[22:32:28] <Stemby> ora aggiungiamo al nostro bagaglio tecnico gli oggetti di tipo file
[22:33:03] <Stemby> aprite la console
[22:33:16] <amosse> ok
[22:33:57] <Stemby> >>> open('/tmp/workfile', 'w')
[22:33:57] <Stemby> <_io.TextIOWrapper name='/tmp/workfile' mode='w' encoding='UTF-8'>
[22:34:02] <Stemby> visto?
[22:34:18] <spirit> si
[22:34:32] <Stemby> vediamo cosa abbiamo fatto
[22:35:01] <Stemby> fate così
[22:35:12] <Stemby> dal terminale di sistema (bash):
[22:35:19] <Stemby> ls /tmp
[22:35:53] <Stemby> vedrete che c'è un file che si chiama workfile
[22:35:56] <Stemby> visto?
[22:36:02] <spirit> si
[22:36:07] <amosse> ok
[22:36:17] <Stemby> quello è il file che abbiamo creato poco fa
[22:36:30] <Stemby> in realtà il contenuto è vuoto
[22:36:36] <Stemby> potete provare, se volete
[22:36:45] <Stemby> cat /tmp/workfile
[22:36:50] <Stemby> (sempre da bash)
[22:37:05] <Stemby> visto?
[22:37:19] <spirit> è vuoto
[22:37:24] <Stemby> esatto
[22:37:27] <Stemby> infatti:
[22:37:30] <Stemby> ls -l /tmp/
[22:37:36] <Stemby> vedrete che occupa 0 byte
[22:37:58] <Stemby> ok?
[22:38:05] <spirit> ok
[22:38:18] <amosse> ok
[22:38:19] <Stemby> bon, allora analizziamo un po' meglio quello che abbiamo digitato
[22:38:32] <Stemby> intanto i 2 parametri
[22:38:41] <Stemby> (le 2 stringhe)
[22:38:50] <Stemby> la prima stringa è chiara, no?
[22:39:01] <amosse> si
[22:39:10] <amosse> scusa
[22:39:31] <amosse> se il file era presente, con lo stesso comando lo aprivo?
[22:39:39] <Stemby> no
[22:39:44] <Stemby> lo vediamo tra un attimo
[22:39:49] <amosse> ok
[22:40:04] <Stemby> intanto, spirit, ti è chiaro il primo parametro?
[22:40:53] <Stemby> spirit... un po' più svelto, per favore, altrimenti impieghiamo le ore
[22:41:02] <Stemby> se non ti è chiaro dillo, che rispiego
[22:41:11] <spirit> si
[22:41:17] <Stemby> ok
[22:41:23] <Stemby> è semplicemente il nome del fine
[22:41:26] <Stemby> *file
[22:41:33] <Stemby> come STRINGA
[22:41:40] <Stemby> (ricordatevi le virgolette)
[22:41:50] <amosse> incluso il percorso
[22:42:03] <Stemby> cosa importante: accetta percorsi sia assoluti che relativi
[22:42:25] <Stemby> quindi se non anteponete il percorso, verrà creato un file nella directory in cui vi trovate
[22:42:40] <amosse> ok
[22:42:40] <Stemby> il concetto di percorso assoluto o relativo è chiaro per tutti?
[22:42:57] <Stemby> amosse?
[22:42:57] <spirit> non tanto
[22:43:12] <Stemby> weirdo: lo vuoi spiegare tu?
[22:43:19] <amosse> meglio rispiegare un attimo
[22:43:30] <Stemby> così mi riposo un attimo
[22:44:16] <Stemby> http://it.wikipedia.org/wiki/Percorso
[22:44:21] <Stemby> lì c'è qualcosa
[22:44:33] <Stemby> ma mi sembra un po' troppo win-centrico
[22:44:37] <Stemby> non che cambi molto
[22:44:44] <Stemby> cià, lo spiego a parole mie
[22:44:49] <Stemby> percorso assoluto:
[22:44:56] <Stemby> su Unix è molto semplice
[22:45:03] <weirdo> :P
[22:45:09] <Stemby> TUTTO il filesistem ha un'origine
[22:45:12] <Stemby> quale?
[22:45:23] <amosse> root
[22:45:27] <Stemby> ("filesystem" è chiaro?)
[22:45:31] <Stemby> amosse: esatto
[22:45:38] <Stemby>  /
[22:45:46] <amosse> ok
[22:45:48] <Stemby> quella è l'origine del filesystem
[22:45:57] <Stemby> spirit: ci sei?
[22:46:00] <weirdo> non sono bravo a spiegare le cose
[22:46:02] <spirit> si ci sono
[22:46:16] <Stemby> quello lo sapevi?
[22:46:21] <spirit> si
[22:46:25] <Stemby> ok
[22:46:36] <Stemby> dicevo che su Unix è tutto più semplice proprio per quel motivo
[22:46:52] <Stemby> TUTTI i file di sistema avranno un percorso assoluto che parte da lì
[22:46:55] <Stemby> dalla radice
[22:47:07] <Stemby> non importa fisicamente dove si trovino
[22:47:18] <Stemby> (disco fisso, chiavetta USB, rete, ecc.)
[22:47:45] <Stemby> tutto viene montato in un unico filesystem, che ha appunto questa struttura ad albero che parte dalla radice
[22:48:14] <Stemby> dunque, se vogliamo trovare un file, basta conoscere questo percorso
[22:48:17] <Stemby> esempio:
[22:48:33] <Stemby> /home/pippo/Documenti/TopSecret.txt
[22:48:36] <Stemby> ok?
[22:48:46] <amosse> ok
[22:48:48] <spirit> ok
[22:48:51] <weirdo> mi sarei limitato forse a: prova  cat /tmp/workfile   e poi prova  cd / && cat ../tmp/workfile
[22:48:59] <weirdo> un po' criptico
[22:49:02] <Stemby> :)
[22:49:19] <weirdo> e ho pure sbagliato
[22:49:20] <Stemby> bon, quello è il percorso assoluto
[22:49:39] <weirdo> cat /tmp/workfile   e     cd /media/ && cat ../tmp/workfile
[22:49:49] <Stemby> il percorso relativo invece, come dice il nome stesso, è un percorso che parte da dove ci si trova
[22:50:21] <amosse> ok
[22:50:36] <Stemby> ad esempio, se ci si trova in /home/pippo/, il percorso relativo del file di prima quale sarà?
[22:51:23] <spirit> /home/pippo/Documenti/TopSecret.txt
[22:51:32] <Stemby> no, quello è il percorso assoluto
[22:51:37] <Stemby> amosse?
[22:52:12] <spirit> cd home
[22:52:17] <Stemby> ?
[22:52:21] <Stemby> sono già lì
[22:52:28] <Stemby> in home/pippo/
[22:52:33] <Stemby> *
[22:52:36] <Stemby> /home/pippo
[22:52:42] <Stemby> ok?
[22:52:57] <amosse> ok
[22:53:04] <Stemby> se io sono l'utente pippo, avrò il prompt fatto così, con ogni probabilità:
[22:53:31] <Stemby> pippo@miamacchina:~$
[22:53:38] <Stemby> giusto?
[22:53:43] <amosse> ok
[22:53:43] <spirit> giusto
[22:53:46] <Stemby> con ~ che significa?
[22:53:57] <amosse> home
[22:54:05] <Stemby> /home/pippo/
[22:54:11] <Stemby> la home dell'utente
[22:54:14] <Stemby> ok?
[22:54:17] <amosse> ok
[22:54:21] <spirit> ok
[22:54:21] <Stemby> bon
[22:54:25] <Stemby> io sono lì
[22:54:32] <Stemby> se faccio
[22:54:34] <Stemby> ls
[22:54:41] <Stemby> vedrò tanti file e cartelle
[22:54:47] <Stemby> tra cui:
[22:54:52] <Stemby> Documenti/
[22:54:54] <Stemby> giusto?
[22:55:00] <amosse> ok
[22:55:01] <spirit> giusto
[22:55:10] <Stemby> e sappiamo che dentro a quella cartella c'è il nosto file
[22:55:18] <Stemby> come lo visualizziamo?
[22:55:40] <spirit> con cat o less file
[22:55:52] <Stemby> fammi l'esempio concreto
[22:55:56] <amosse> il nostro file é in /temp
[22:56:02] <Stemby> il nome del file lo conosci
[22:56:07] <spirit> less /tmp/workfile
[22:56:13] <Stemby> no
[22:56:16] <amosse> non in /home
[22:56:26] <Stemby> il file TopSecret.txt dell'esempio precedente
[22:56:33] <Stemby> (è un file inventato)
[22:56:41] <Stemby> ma ne conoscete il percorso assoluto
[22:56:49] <Stemby> e sapete dove vi trovate
[22:56:50] <spirit> less /home/pippo/Documenti/TopSecret.txt
[22:56:58] <Stemby> ok
[22:57:06] <Stemby> così hai usato il percorso assoluto
[22:57:15] <Stemby> ma si possono risparmiare tanti caratteri
[22:57:16] <Stemby> come?
[22:57:30] <Stemby> ricordatevi: siete in ~
[22:57:38] <Stemby> amosse?
[22:57:49] <weirdo> che pazienza :)
[22:57:59] <amosse> less /Documenti/TopSecret.txt
[22:58:13] <Stemby> no
[22:58:21] <Stemby> se fai così dà errore
[22:58:31] <amosse> less Documenti/TopSecret.txt
[22:58:39] <Stemby> oh
[22:58:41] <Stemby> esatto
[22:58:51] <Stemby> quello è il percorso relativo!
[22:59:00] <spirit> ok
[22:59:09] <Stemby> attenzione a non anteporre la barra
[22:59:17] <amosse> mettiamo che TopSecret é in '/'
[22:59:19] <Stemby> altrimenti avrete il percorso ASSOLUTO
[22:59:30] <amosse> e noi ci troviamo in /home
[22:59:30] <Stemby> amosse: c'è qualcosa che non va
[22:59:48] <Stemby> in i file di testo non bisogna metterli :p
[22:59:50] <Stemby> in /
[23:00:10] <Stemby> però facciamo finta di aver disobbedito a tutte le regole di buonsenso
[23:00:23] <amosse> ok
[23:00:27] <Stemby> e abbiamo: /TopSecret.txt
[23:00:29] <Stemby> ok?
[23:00:38] <spirit> ok
[23:00:41] <amosse> ok
[23:00:45] <weirdo> ok
[23:00:47] <Stemby> un dannatissimo file di testo nella directory root
[23:00:56] <Stemby> e ci troviamo in /home/
[23:01:00] <Stemby> come visualizzarlo?
[23:01:06] <amosse> esatto
[23:01:11] <Stemby> entrano in gioco delle directory speciali
[23:01:15] <Stemby> (vistuali)
[23:01:29] <Stemby> che vedete sempre ogni volta che fate ls
[23:01:32] <Stemby> sono 2
[23:01:36] <Stemby> una si chiama .
[23:01:41] <Stemby> l'altra si chiama ..
[23:01:46] <Stemby> ok?
[23:01:55] <amosse> ok
[23:01:56] <spirit> ok
[23:02:05] <Stemby> . è la dir corrente
[23:02:26] <Stemby> infatti per lanciare uno script che avete reso eseguibile come fate?
[23:02:34] <Stemby> ./mioscript.py
[23:02:36] <Stemby> giusto?
[23:02:41] <amosse> ok
[23:02:41] <Stemby> cosa significa?
[23:03:01] <Stemby> ./ significa proprio "qui"
[23:03:09] <Stemby> la directory corrente
[23:03:26] <amosse> ok
[23:03:29] <Stemby> invece .. che cos'è?
[23:03:37] <Stemby> è la directory precedente
[23:03:44] <amosse> ok
[23:03:51] <Stemby> quella che viene subito prima, partendo da /
[23:04:05] <Stemby> quindi se siamo in /home/pippo/
[23:04:12] <Stemby> ../ sarà /home(
[23:04:17] <Stemby> /home/
[23:04:20] <Stemby> ok?
[23:04:36] <amosse> ok
[23:04:37] <spirit> ok
[23:04:38] <Stemby> se siamo in /home/, ../ sarà /
[23:04:43] <Stemby> infatti:
[23:04:52] <Stemby> andate in ~
[23:04:58] <Stemby> (nella vostra home)
[23:05:05] <Stemby> basta fare:
[23:05:09] <Stemby> cd <invio>
[23:05:11] <Stemby> ok?
[23:05:23] <Stemby> ci siete?
[23:05:35] <spirit> si
[23:05:41] <amosse> quindi per passare alla dir precedente:
[23:05:46] <amosse> ../
[23:05:46] <Stemby> cd ..
[23:06:06] <spirit> ok
[23:06:09] <Stemby> e dove siete finiti?
[23:06:19] <spirit> in home
[23:06:23] <Stemby> esatto
[23:06:26] <Stemby> se fate di nuovo
[23:06:29] <Stemby> cd ..
[23:06:32] <Stemby> ?
[23:06:43] <amosse> '/'
[23:06:47] <Stemby> esatto
[23:06:51] <Stemby> in root
[23:06:55] <Stemby> ok?
[23:06:59] <amosse> ok
[23:07:03] <Stemby> ora torniamo all'esempio di amosse
[23:07:08] <Stemby> siete in /home/
[23:07:13] <Stemby> volete vedere:
[23:07:38] <Stemby>  /TopSecret.txt
[23:07:41] <Stemby> come fate?
[23:07:47] <Stemby> (usando il percorso relativo)
[23:08:00] <amosse> ../TopSecret.txt
[23:08:13] <Stemby> cat ../TopSecret.txt
[23:08:17] <amosse> ok
[23:08:18] <Stemby> o less
[23:08:21] <amosse> sorry
[23:08:29] <Stemby> d'accordo?
[23:08:33] <amosse> ok
[23:08:37] <spirit> si
[23:08:40] <Stemby> credevo queste cose fossero assodate
[23:08:55] <amosse> ok
[23:09:02] <weirdo> e invece tornando all'esmpio iniziale del file /tmp/workfile, come ci arrivate da /home/pippo ? :)
[23:09:03] <Stemby> vabbé, un piccolo ripassino di concetti di base sulla nostra shell :)
[23:09:09] <spirit> io no sapevo dei ../
[23:09:26] <amosse> solo per chiarire
[23:09:31] <Stemby> allora:
[23:09:35] <Stemby> percorso assoluto:
[23:09:53] <Stemby> less /tmp/workfile
[23:10:00] <Stemby> percorso relativo:
[23:10:15] <Stemby> less ../../tmp/workfile
[23:10:15] <amosse> cat ../../TopSecret.txt
[23:10:33] <Stemby> ok?
[23:10:42] <amosse> si volevo dire la stessa cosa, ok.
[23:10:42] <spirit> ok
[23:10:49] <Stemby> bon
[23:10:56] <Stemby> ora sapete TUTTO :p
[23:11:21] <Stemby> vantaggi/svantaggi
[23:11:25] <Stemby> pensateci un attimo
[23:12:03] <amosse> percorso assoluto: si digita più testo
[23:12:09] <Stemby> non è detto
[23:12:13] <amosse> ma é più chiaro
[23:12:22] <amosse> é vero
[23:12:29] <Stemby> però è più rigido
[23:12:33] <Stemby> nel senso:
[23:12:55] <Stemby> è più "sicuro" perché non dipende da dove ci si trova al momento
[23:13:20] <Stemby> quindi, ad esempio, per aiutare qualcuno in chat o sul forum, in genere si preferisce usare i percorsi assokuti
[23:13:23] <Stemby> *assoluti
[23:13:46] <Stemby> perché almeno si è sicuri di beccare quei file, ovunque l'utente da aiutare si trovi
[23:14:02] <Stemby> però fate attenzione su python:
[23:14:13] <Stemby> python è nato come linguaggio multipiattaforma
[23:14:24] <Stemby> i percorsi assoluti funzionano su Unix
[23:14:36] <Stemby> ma sono ben diversi dai percorsi assoluti su win
[23:14:52] <Stemby> inceve i percorsi relativi funzionano ovunque allo stesso modo
[23:14:55] <amosse> ok
[23:14:56] <Stemby> ok?
[23:15:11] <amosse> ok
[23:15:12] <Stemby> piccola parentesi
[23:15:24] <Stemby> su win le barre delle directory sono al contrario
[23:15:32] <amosse> si
[23:15:35] <Stemby> C:\dir\altradir
[23:15:39] <Stemby> ok?
[23:15:46] <amosse> ok
[23:15:48] <Stemby> su Unix invece sono diritte
[23:15:53] <Stemby> /root/pippo/
[23:15:58] <amosse> ok
[23:16:05] <spirit> ok
[23:16:15] <Stemby> quando usate i percorsi in python, usate la sintassi Unix
[23:16:25] <amosse> ok
[23:16:35] <Stemby> se il programma viene eseguito su win, penserà python stesso a girare le barre
[23:16:42] <Stemby> ovvero:
[23:16:52] <Stemby> l'interfaccia di programmazione segue lo stile Unix
[23:17:03] <amosse> ok
[23:17:18] <Stemby> poi sarà l'interprete a trovare i file al posto giusto, indipendentemente dal sistema su cui gira
[23:17:28] <Stemby> bon
[23:17:46] <spirit> (io uso solo linux)
[23:17:50] <Stemby> con questo abbiamo esaurito il primo parametro di open()
[23:18:15] <Stemby> spirit: sì, ma non è detto che i tuoi programmi non vengano fatti girare altrove
[23:18:24] <Stemby> su questo bisogna stare molto attenti
[23:18:38] <spirit> vero hai ragione
[23:18:41] <Stemby> tutti noi siamo portati a pensare: chissenefrega degli altri
[23:18:50] <Stemby> che usino Debian anche loro
[23:19:00] <Stemby> però è un atteggiamento a mio avviso sbagliato
[23:19:24] <Stemby> dunque la prima regola del buon pitonista è: scrivi SEMPRE codice multipiattaforma
[23:19:43] <amosse> a tale proposito dove suggerisci di salvare i moduli?
[23:19:44] <Stemby> anche solo per te stesso: è una buona palestra comunque
[23:19:53] <Stemby> dove volete
[23:20:08] <Stemby> al momento comunque in un ramo di /home
[23:20:13] <Stemby> es:
[23:20:23] <Stemby> /home/pippo/python
[23:20:25] <Stemby> oppure
[23:20:33] <Stemby> /home/pippo/script
[23:20:36] <Stemby> oppure
[23:20:47] <Stemby> /home/pippo/prove
[23:20:50] <Stemby> dove vi pare
[23:20:52] <amosse> ok
[23:21:01] <Stemby> solo evitate di sporcare il filesystem
[23:21:11] <Stemby> nella vostra home fate le schifezze che volete
[23:21:20] <Stemby> evitate di andare altrove :)
[23:22:07] <Stemby> poi, per fare le cose per bene, i programmi finiti andrebbero impacchettati
[23:22:29] <Stemby> ma questo è molto lontano ancora :)
[23:22:35] <Stemby> allora
[23:22:41] <Stemby> secondo parametro
[23:23:09] <Stemby> http://docs.python.org/release/3.1.3/library/functions.html#open
[23:23:19] <Stemby> ecco, lì trovate la sintassi completa
[23:23:41] <Stemby> come vedete ci sono molti altri parametri, ma hanno già tutti un valore di default
[23:23:52] <Stemby> il parametro che ci interessa è mode
[23:23:58] <Stemby> (il secondo)
[23:24:08] <Stemby> come vedete ha anc'esso un valore di default
[23:24:10] <Stemby> quale?
[23:24:32] <Stemby> *anch'esso
[23:24:40] <amosse> r
[23:24:54] <Stemby> 'r'
[23:24:58] <Stemby> è una stringa!
[23:25:02] <Stemby> :)
[23:25:05] <Stemby> ok?
[23:25:07] <amosse> sorry
[23:25:12] <Stemby> questo cosa significa?
[23:25:20] <amosse> lettura
[23:25:25] <amosse> solo lettura
[23:25:34] <Stemby> che se non indichiamo il secondo parametro, il file verrà solo letto
[23:25:43] <Stemby> quindi:
[23:25:45] <amosse> ok
[23:25:55] <Stemby> open('pippo.txt', 'r')
[23:26:01] <Stemby> è del tutto equivalente a:
[23:26:12] <Stemby> open('pippo.txt')
[23:26:16] <Stemby> d'accordo?
[23:26:31] <amosse> ok
[23:26:43] <Stemby> agli altri parametri dateci un'occhiata, ma alla fine non li userete mai
[23:26:49] <Stemby> invece il secondo è importante
[23:26:56] <Stemby> guardate la tabellina
[23:26:59] <Stemby> tutto chiaro?
[23:27:19] <Stemby> un attimo
[23:27:33] <Stemby> della tabella, vi interessano in realtà solo le prime 3 righe
[23:27:45] <Stemby> 'r', 'w', 'a'
[23:27:58] <Stemby> le altre possibilità credo che non le userete mai
[23:28:10] <Stemby> o comunque, se vi servissero, sapete dove trovarle
[23:28:13] <Stemby> ok?
[23:28:18] <amosse> ok
[23:28:21] <spirit> ok
[23:28:27] <Stemby> 'r', 'w', 'a' son chiari?
[23:28:54] <amosse> 'a' -> scrive alla file del file?
[23:28:58] <Stemby> esatto
[23:29:04] <amosse> ok
[23:29:07] <Stemby> e come quando in bash si fa >>
[23:29:11] <Stemby> hai presente?
[23:29:21] <Stemby> aggiunge al file
[23:29:33] <amosse> ah
[23:29:47] <Stemby> è come 'w', solo che non cancella il contenuto, se esiste
[23:29:56] <amosse> ok
[23:30:01] <Stemby> aggiunge nuovo contenuto in coda al file
[23:30:10] <Stemby> d'accordo?
[23:30:16] <amosse> ok
[23:30:19] <Stemby> quindi, riassumendo:
[23:30:24] <Stemby> sappiamo aprire un file
[23:30:30] <Stemby> quale funzione si usa?
[23:30:41] <Stemby> (anche la doc la chiama funzione, quindi mi allineo :) )
[23:30:49] <amosse> open()
[23:30:52] <Stemby> esatto
[23:31:06] <Stemby> abbiamo visto che il primo parametro è il percorso
[23:31:23] <Stemby> abbiamo visto il secondo parametro: la modalità di apertura
[23:31:30] <amosse> ok
[23:31:31] <Stemby> lettura o scrittura
[23:31:42] <Stemby> per la scrittura: 'w' o 'a'
[23:31:52] <Stemby> abbiamo visto la differenza tra le 2
[23:32:01] <Stemby> bon, direi che il grosso è fatto
[23:32:08] <Stemby> ora dobbiamo fare un po' di pratica
[23:32:16] <Stemby> tornando al tutorial:
[23:32:54] <Stemby> come vedete come esempio introduttivo dice questo:
[23:32:57] <Stemby> >>> f = open('/tmp/workfile', 'w')
[23:33:00] <Stemby> visto?
[23:33:20] <amosse> ok
[23:33:40] <Stemby> questo perché come dicevo, con open otteniamo un oggetto
[23:34:01] <Stemby> e come tutti gli oggetti, se vogliamo elaborarli spesso conviene raccoglierli in una variabile
[23:34:11] <Stemby> altrimenti, una volta ottenuto, lo si perde
[23:34:13] <Stemby> ok?
[23:34:19] <amosse> ok
[23:34:29] <Stemby> nella prova che abbiamo fatto prima, abbiamo creato un file vuoto
[23:34:41] <Stemby> ora non possiamo fare altro
[23:34:48] <Stemby> peché quell'oggetto è andato perduto
[23:36:04] <amosse> perché perduto...
[23:36:12] <amosse> il file é ancora la
[23:36:18] <Stemby> sì
[23:36:27] <Stemby> ma non hai più loggetto
[23:36:32] <Stemby> è come quando fai:
[23:36:39] <Stemby> >>> 3 + 1
[23:37:05] <amosse> devi ricreare l' oggetto per collegarti al file
[23:37:16] <Stemby> sì
[23:37:21] <Stemby> ma tanto vale farlo subito
[23:37:40] <Stemby> è inutile creare un file vuoto
[23:37:44] <Stemby> no?
[23:37:50] <amosse> chiaro
[23:38:11] <Stemby> bon
[23:38:22] <Stemby> allora
[23:38:29] <Stemby> adesso recupero un file
[23:38:35] <Stemby> e proviamo a giocarci
[23:41:07] <Stemby> http://paste.debian.net/115701/
[23:41:21] <Stemby> credo che i diritti siano scaduti :p
[23:41:24] <Stemby> bon
[23:41:33] <Stemby> salvatelo da qualche parte
[23:41:55] <Stemby> anzi, lo carico su gobby
[23:42:01] <Stemby> poi salvatelo
[23:42:15] <amosse> ok
[23:42:46] <Stemby> salvato?
[23:43:53] <amosse> ok
[23:43:57] <Stemby> spirit?
[23:44:01] <spirit> si, ma non da gobby, che non lo trovo
[23:44:07] <Stemby> ?
[23:44:12] <Stemby> basta salvare
[23:44:22] <Stemby> comuque poco importa
[23:44:25] <spirit> ah trovato..
[23:44:30] <Stemby> basta che tu ce l'abbia
[23:44:51] <spirit> ok
[23:44:52] <Stemby> dante.txt
[23:44:55] <Stemby> ok
[23:45:03] <amosse> ok
[23:45:19] <Stemby> dalla directory in cui si trova il file, accedete all'interfaccia interattiva
[23:45:46] <Stemby> fatto?
[23:46:24] <amosse> ok
[23:46:26] <spirit> si
[23:47:04] <Stemby> bon
[23:47:06] <Stemby> allora
[23:47:32] <Stemby> create un oggetto file che rappresenti il file che avete salvato, in lettura
[23:48:14] <Stemby> fatto?
[23:48:49] <Stemby> spirit?
[23:48:54] <Stemby> amosse?
[23:49:06] <amosse> un min
[23:49:18] <Stemby> è una riga di codice...
[23:50:05] <Stemby> ci siete?
[23:50:21] <spirit> ...
[23:50:21] <amosse>  f = open('dante.txt') Traceback (most recent call last):   File "<stdin>", line 1, in <module> IOError: [Errno 2] No such file or directory: 'dante.txt'
[23:50:38] <Stemby> non trova il file
[23:50:42] <amosse> eppure il file c'è...
[23:50:47] <Stemby> 1) hai usato un altro nome
[23:51:02] <Stemby> 2) hai lanciato python3 da un'altra directory
[23:51:09] <Stemby> non vedo altre possibilità
[23:51:16] <spirit> a me lo trova
[23:51:38] <amosse> un minuto
[23:51:59] <amosse> in Documenti della mia home ho
[23:52:03] <amosse> dante.txt
[23:52:06] <Stemby> ok
[23:52:08] <Stemby> quindi:
[23:52:15] <Stemby> cd ~/Documenti
[23:52:17] <Stemby> python3
[23:52:25] <amosse> fatto
[23:52:36] <amosse> non capisco
[23:52:45] <Stemby> scusa
[23:52:46] <Stemby> esci
[23:52:49] <Stemby> cd ~/Documenti
[23:52:51] <Stemby> ci sei
[23:52:52] <Stemby> ?
[23:53:20] <amosse> ok
[23:53:20] <amosse> funziona
[23:53:26] <Stemby> oh
[23:53:28] <Stemby> bon
[23:53:33] <Stemby> spirit: chiaro fin qui?
[23:53:44] <Stemby> la sintassi usata da amosse è la più sintetica possibile
[23:53:58] <Stemby> se fate:
[23:54:01] <Stemby> >>> f
[23:54:13] <Stemby> dovreste vedere il vostro oggetto
[23:54:15] <Stemby> giusto?
[23:54:16] <spirit> si
[23:54:26] <amosse> ok
[23:54:35] <Stemby> ricapitolando
[23:54:52] <Stemby> spirit: mi spieghi quella riga di codice?
[23:55:06] <Stemby> f = open('dante.txt')
[23:55:22] <Stemby> ci son tanti concetti in quei pochi caratteri
[23:55:44] <spirit> 1) variabile f
[23:55:53] <Stemby> ok
[23:55:56] <Stemby> =
[23:56:32] <Stemby> assegnazione del valore di un oggetto alla variabile
[23:56:34] <Stemby> ok?
[23:56:45] <spirit> si
[23:56:49] <Stemby> poi, la parte pià succosa, è quella dopo l'=
[23:56:49] <amosse> ok
[23:57:01] <Stemby> spiegamela
[23:57:41] <spirit> poi ci dovrebbe esssere la funzione open con il nostro oggetto
[23:58:00] <Stemby> no, è proprio la funzione open che genera l'oggetto
[23:58:27] <Stemby> <_io.TextIOWrapper name='dante.txt' mode='r' encoding='UTF-8'>
[23:58:38] <spirit> ok (mi spiego male...)
[23:58:45] <Stemby> questo è il prodotto della funzione che abbiamo lanciato
[23:58:56] <Stemby> d'accordo?
[23:59:01] <spirit> si
[23:59:04] <Stemby> poi?
[23:59:11] <Stemby> dimmi 2 parole sui parametri
[23:59:52] <spirit> abbiamo la stringa 'dante.txt' che è l'oggetto
[23:59:57] <Stemby> no
[00:00:00] - {Day changed to lun mag 2 00:00:00 2011}
[00:00:05] <Stemby> non è l'oggetto
[00:00:21] <spirit> è il file
[00:00:22] <Stemby> o meglio, essendo una stringa è sì un oggetto, ma come tutte le cose in python
[00:00:25] <Stemby> esatto
[00:00:30] <Stemby> è il nome del file
[00:00:36] <Stemby> scritto come?
[00:00:45] <Stemby> come percorso...
[00:00:54] <spirit> giusto
[00:00:57] <Stemby> come percorso...
[00:01:00] <Stemby> ...
[00:01:08] <spirit> assoluto
[00:01:11] <Stemby> no!
[00:01:21] <Stemby> relativo!
[00:01:28] <spirit> scusa
[00:01:30] <Stemby> assoluto sarebbe stato:
[00:01:47] <Stemby> '/home/spirit/Documenti/dante.txt'
[00:01:51] <Stemby> o quel che l'è
[00:02:00] <spirit> ok
[00:02:03] <Stemby> ricordati:
[00:02:16] <Stemby> i percorsi assoluti iniziano SEMPRE con una barra
[00:02:21] <Stemby> (almeno su Unix)
[00:02:37] <spirit> ok
[00:02:42] <Stemby> perché bisogna partire dalla radice e risalire l'albero, seguendo i rami corretti
[00:03:10] <Stemby> bon
[00:03:12] <Stemby> poi?
[00:03:17] <Stemby> hai da aggiungere altro?
[00:03:36] <Stemby> <_io.TextIOWrapper name='dante.txt' mode='r' encoding='UTF-8'>
[00:03:38] <spirit> poi il 2° parametro mode = 'r'
[00:03:42] <Stemby> esatto
[00:03:48] <Stemby> non è stato specificato
[00:03:52] <spirit> che ci indica la sola lettura
[00:03:58] <Stemby> esatto
[00:04:09] <Stemby> poi, come vedete, l'encoding è UTF-8
[00:04:17] <Stemby> è lo standard su Debian
[00:04:25] <amosse> ok
[00:04:34] <spirit> che è la codifica giusto?
[00:04:39] <Stemby> fate attenzione ai file provenienti da altri sistemi, che potrebbero essere codificati in altro modo
[00:04:46] <Stemby> sì, esatto
[00:05:11] <Stemby> comunque, di default la codifica è UTF-8
[00:05:26] <Stemby> se vi arrivassero file codificati in modo barbaro:
[00:05:34] <Stemby> 1) ve lo fate rispedire come si deve
[00:05:45] <Stemby> 2) lo convertite in UTF-8
[00:06:08] <amosse> come si convertono in file?
[00:06:12] <Stemby> 3) scrivete un programma che gestisca la codifica del tizio che vi ha mandato il file
[00:06:32] <Stemby> amosse: mah, immagino ci siano degli script
[00:06:42] <Stemby> in ogni caso apri con l'editor che vuoi
[00:07:03] <Stemby> imposti la codifica
[00:07:28] <amosse> ok
[00:07:34] <Stemby> controlli che accenti e caratteri strani siano a posto
[00:07:50] <Stemby> e salvi a questo punto una copia usando questa volta UTF-8 come codifica
[00:07:58] <amosse> ok
[00:08:02] <Stemby> gedit, kate, ecc. fanno tranquillamente questa cosa
[00:08:12] <amosse> ok
[00:08:38] <Stemby> la terza opzione la eviterei
[00:08:53] <Stemby> (credo sia un parametro di open(), se vi interessa)
[00:08:55] <amosse> chiaro
[00:09:09] <Stemby> però sarebbe ora di passare tutti a UTF-8
[00:09:27] <Stemby> quindi appoggerei soprattutto le opzioni 1 e 2
[00:09:29] <Stemby> ok?
[00:09:36] <amosse> ok
[00:10:08] <Stemby> bon, allora giochiamo un po' col nostro oggetto
[00:10:25] <Stemby> come vi dicevo, lo abbiamo tenuto da parte in una variabile
[00:10:41] <Stemby> altrimenti a questo punto sarebbe già morto, e non potremmo più farci niente
[00:10:43] <Stemby> ok?
[00:10:51] <amosse> ok
[00:10:52] <Stemby> f è il nosto oggetto
[00:10:52] <spirit> ok
[00:11:04] <Stemby> possiamo farci un po' di cosucce.
[00:11:18] <Stemby> http://docs.python.org/release/3.1.3/tutorial/inputoutput.html#reading-and-writing-files
[00:11:40] <Stemby> come d'abitudine, abbiamo a disposizione un bel po' di metodi già belli e pronti
[00:11:57] <Stemby> ad esempio il metodo read()
[00:12:10] <Stemby> mi sembra abbastanza autoesplicativo
[00:12:14] <Stemby> provatelo
[00:12:37] <amosse> >>> f.read()
[00:12:44] <Stemby> esatto
[00:12:46] <Stemby> visto?
[00:12:51] <amosse> 'Nel mezzo del cammin di nostra vita\nmi ritrovai per una selva oscura,\nché la diritta via era smarrita.\n'
[00:12:57] <Stemby> esatto
[00:13:02] <amosse> non va a capo
[00:13:10] <Stemby> legge tutto il contenuto del file e lo caccia in una stringa
[00:13:14] <Stemby> sì che va a capo
[00:13:18] <Stemby> a modo suo
[00:13:22] <Stemby> ma va a capo
[00:13:24] <Stemby> leggi bene
[00:13:25] <Stemby> :)
[00:13:32] <amosse> con \n
[00:13:35] <Stemby> esatto
[00:13:45] <Stemby> se fai print(.....)
[00:13:52] <Stemby> vedrai il risultato come vuoi tu
[00:13:53] <amosse> giusto
[00:14:15] <Stemby> però attento
[00:14:20] <Stemby> ora non funziona più
[00:14:27] <amosse> infatti
[00:14:31] <Stemby> perché è arrivato in fondo al file
[00:14:50] <Stemby> se ripeti f.read() vedrai che otterrai una stringa vuota
[00:15:27] <Stemby> dobbiamo riportare il "cursore" all'inizio
[00:15:36] <Stemby> per far questo si usa il metodo seek()
[00:15:36] <amosse> vero
[00:16:01] <Stemby> attenzione che vuole un parametro
[00:16:06] <amosse> oppure ricreo l'oggetto?
[00:16:07] <Stemby> il parametro è un intero
[00:16:12] <Stemby> nooo!!!
[00:16:18] <Stemby> che sprecone!
[00:16:20] <Stemby> :)
[00:16:25] <Stemby> dicevo
[00:16:27] <amosse> ok
[00:16:28] <Stemby> il parametro è un intero
[00:16:50] <Stemby> che rappresenta il byte del file a cui andare
[00:17:00] <amosse> 1 -> riga 1?
[00:17:04] <Stemby> byte
[00:17:07] <Stemby> cos'è un byte?
[00:17:10] <Stemby> ...
[00:17:14] <Stemby> ta dam...
[00:17:32] <Stemby> qui casca il pitonista
[00:17:33] <amosse> un numero int
[00:17:41] <Stemby> in informatica
[00:17:42] <amosse> 0 - 255
[00:17:43] <Stemby> cos'è un byte?
[00:17:59] <amosse> non lo so
[00:18:09] <Stemby> grossolanamente è un carattere
[00:18:27] <Stemby> usando la tabella ascii questo è senz'altro vero
[00:18:43] <Stemby> usando unicode non è proprio così vero
[00:18:51] <Stemby> non sempre, per lo meno
[00:18:53] <Stemby> comunque
[00:19:08] <Stemby> noi dobbiamo tornare a prima della prima lettera
[00:19:10] <Stemby> quindi?
[00:19:23] <spirit> (un byte è formato da 8 bit se non sbaglio)
[00:19:34] <Stemby> quasi sempre sì
[00:19:39] <amosse> f.seek(0)
[00:19:39] <Stemby> scolasticamente sì
[00:19:43] <Stemby> esatto!
[00:19:56] <Stemby> a questo punto possiamo rilanciare read()
[00:20:00] <Stemby> fate delle prove
[00:20:06] <Stemby> con read()
[00:20:14] <Stemby> print(f.read())
[00:20:21] <Stemby> con seek()
[00:20:28] <Stemby> mettendo vari numeri
[00:20:30] <Stemby> ok?
[00:20:40] <Stemby> giocate qualche minuto con questi metodi
[00:20:48] <Stemby> spirit: tu ci sei?
[00:21:04] <spirit> si ci sono
[00:21:37] <spirit> con seek basta un qualsiasi numero'
[00:21:44] <spirit> giusto?
[00:21:46] <Stemby> 0 per tornare all'inizio
[00:21:52] <Stemby> 1 per saltare la prima lettera
[00:22:03] <Stemby> 2 per saltare le prime 2
[00:22:04] <Stemby> ecc.
[00:22:10] <spirit> ok
[00:22:12] <amosse> chiaro
[00:22:27] <Stemby> è come riavvolgere un nastro
[00:22:28] <Stemby> :)
[00:22:45] <amosse> slicing
[00:22:49] <amosse> non esiste
[00:23:06] <amosse> riavvolgo una fetta
[00:23:11] <amosse> ?
[00:23:27] <Stemby> beh, puoi fare tutti gli affettamenti che vuoi sulla stringa che ottieni
[00:23:45] <Stemby> ricordati: read() restituisce una stringa
[00:23:57] <Stemby> poi su quella stringa puoi farci tutto cià che vuoi
[00:24:07] <amosse> ok
[00:24:11] <Stemby> ormai dovreste essere in grado di farci parecchie cosucce
[00:24:26] <Stemby> bon
[00:24:31] <Stemby> altro metodo:
[00:24:49] <Stemby> readline()
[00:24:51] <Stemby> provate
[00:25:32] <Stemby> provate ovviamente a lanciarlo più volte
[00:25:45] <spirit> errore
[00:25:49] <Stemby> quale?
[00:26:04] <spirit> readline(2)
[00:26:08] <spirit> Traceback (most recent call last):                 File "<stdin>", line 1, in <module>
[00:26:17] <Stemby> senza parametri
[00:27:02] <Stemby> soprattutto: è un metodo
[00:27:05] <Stemby> non una funzione
[00:27:13] <Stemby> altrimenti ovviamente non lo trova
[00:27:25] <Stemby> spirit: ci sei?
[00:27:32] <spirit> readline(2)                                   errore
[00:27:36] <spirit> ops
[00:27:38] <Stemby> è un metodo
[00:27:40] <spirit> da errore
[00:27:42] <Stemby> spirit: ci sei?
[00:27:45] <Stemby> è un metodo
[00:27:46] <Stemby> è un metodo
[00:27:46] <Stemby> è un metodo
[00:27:47] <Stemby> è un metodo
[00:27:48] <Stemby> è un metodo
[00:27:55] <amosse> l'argomento di read() indica il n° del carettere..
[00:27:55] <spirit> ok
[00:28:02] <Stemby> che cos'è un metodo?
[00:28:10] <Stemby> amosse: sì, anche di readline()
[00:28:29] <amosse> >>> f.readline(4)
[00:28:34] <Stemby> oh!
[00:28:39] <amosse> 'Nel '
[00:28:43] <Stemby> esatto
[00:28:46] <Stemby> rilancialo
[00:29:10] <Stemby> magari con un numero un po' più grande
[00:29:14] <Stemby> tipo:
[00:29:20] <Stemby> f.readline(10)
[00:29:24] <Stemby> ok?
[00:29:29] <amosse> ok
[00:29:35] <Stemby> comunque, di solito lo si usa senza parametri
[00:29:39] <Stemby> f.readline()
[00:29:42] <amosse> lette i primi 10 caratteri
[00:29:51] <amosse> *legge
[00:29:55] <Stemby> ...e poi altri 10, se lo rilandi
[00:29:55] <amosse> ok
[00:30:01] <Stemby> *rilanci
[00:30:06] <amosse> ok
[00:30:15] <Stemby> senza parametri restituisce una riga alla volta
[00:30:40] <Stemby> poi, arrivato in fondo al file, come read() restiutuisce una stringa vuota
[00:30:44] <Stemby> seak()
[00:30:49] <Stemby> e riavvolgi :)
[00:30:51] <Stemby> ok?
[00:30:55] <Stemby> provate ancora un po'
[00:30:56] <amosse> chiaro
[00:31:12] <Stemby> con/senza parametri
[00:32:20] <Stemby> spirit: ci sei?
[00:32:29] <spirit> si provavo
[00:32:32] <Stemby> ok
[00:32:36] <Stemby> tutto chiaro?
[00:32:49] <spirit> si credo di si
[00:32:52] <Stemby> ultimo metodo:
[00:32:55] <Stemby> readlines()
[00:32:55] <amosse> ok
[00:33:00] <Stemby> con la s
[00:33:25] <Stemby> chiaro?
[00:33:37] <Stemby> spirit: spiega
[00:33:47] <spirit> spezza
[00:33:48] <Stemby> che cosa fa il metodo readlines()?
[00:33:54] <Stemby> restituisce...
[00:34:03] <Stemby> la...
[00:34:06] <Stemby> l...
[00:34:10] <Stemby> i...
[00:34:10] <spirit> lista
[00:34:15] <Stemby> delle
[00:34:19] <amosse> righe
[00:34:21] <Stemby> ok!
[00:34:23] <Stemby> :)
[00:34:29] <Stemby> tutto chiaro?
[00:34:35] <amosse> una domanda
[00:34:40] <Stemby> arrivati in fondo → lista vuota
[00:34:45] <Stemby> seek()
[00:34:49] <Stemby> e da capo :)
[00:34:59] <Stemby> dimmi amosse
[00:35:09] <amosse> voglio estrapolare i primi 5 caratteri di ogni riga?
[00:35:22] <Stemby> mah, ci son varie soluzioni
[00:35:35] <Stemby> la più banale:
[00:35:54] <Stemby> for line in f.readlines():
[00:36:21] <Stemby>     print(line[6])
[00:36:29] <Stemby> o quel che vuoi, al posto di print
[00:36:40] <amosse> ok
[00:36:40] <Stemby> non son sicuro che sia molto efficiente
[00:36:48] <Stemby> comunque senz'altro funziona
[00:37:31] <Stemby> sorry
[00:37:42] <Stemby> print(line[:6])
[00:37:45] <Stemby> ovviamente :)
[00:38:03] <amosse> ok
[00:38:07] <Stemby> anzi
[00:38:10] <Stemby> print(line[:5])
[00:38:20] <Stemby> ok, questo è quello giusto :)
[00:38:46] <Stemby> bon, sulla lettura dei file non c'è molto altro
[00:38:48] <Stemby> provate
[00:39:01] <Stemby> per la scrittura, speravo di fare stasera ma è tardi
[00:39:07] <amosse> ok
[00:39:10] <spirit> ok
[00:39:12] <Stemby> direi che potete provare autonomamente
[00:39:16] <Stemby> seguite il tutorial
[00:39:22] <amosse> ok
[00:39:26] <Stemby> se ci son problemi, vediamo la prossima volta
[00:39:29] <Stemby> ATTENZIONE
[00:39:41] <Stemby> quando scrivete un file che esiste, LO CANCELLATE
[00:39:51] <amosse> ok
[00:39:54] <Stemby> quindi non fate stupidate
[00:40:07] <Stemby> usate solo file che potete buttare senza pensieri
[00:40:14] <amosse> ok
[00:40:33] <Stemby> ok spirit?
[00:40:39] <Stemby> esercitati, mi raccomando
[00:40:42] <spirit> si
[00:40:45] <Stemby> notte
[00:40:54] <amosse> Notte e grazie.
[00:41:05] <spirit> ciao grazie buonanotte
[00:41:18] <amosse> Ciao spirit
[00:41:24] <amosse> Notte.
[00:41:27] <spirit> notte amosse
[00:41:40] <spirit> notte