SlideShare une entreprise Scribd logo
1  sur  18
Télécharger pour lire hors ligne
Apertura di un file
   open(filename, mode) restituisce un oggetto
     file
   filename è il nome del file
   mode determina la modalità di apertura:
        'r' : sola lettura
        'w' sola scrittura (un file già esistente verrà
          sovrascritto)
        'a’ append; i dati scritti nel file verranno aggiunti
          alla fine.
        'r+' lettura e scrittura.
   mode è un argomento opzionale;
        'r’ sarà l’assunzione in caso non sia specificato.
Linguaggi dinamici – A.A. 2009/2010
                                                                  2
Apertura di un file binario
   ATTENZIONE: solo per sistemi windows:
      Python su Windows distingue tra file di testo e
        binari
      I caratteri di end-of-line nei file di testo sono

        automaticamente modificati quando si leggono
        e scrivono dati
      'b' aggiunto al parametro mode apre il file in

        modalità binaria (ad es. 'rb', 'wb', 'r+b’, …)
   Su altre piattaforme i due tipi di file sono gestiti
     allo stesso modo



Linguaggi dinamici – A.A. 2009/2010
                                                            3
Lettura di un file: f.read()
   Per leggere il contenuto di un file:
     f.read(size)
      Legge una certa quantità di dati e la

        restituisce come stringa
        size è un argomento opzionale
        Se size è omesso o negativo verrà letto l’intero
          contenuto del file: attenzione alla dimensione!
        Altrimenti, verranno letti e restituiti size byte
        Quando viene raggiunta la fine del file, f.read()
          restituisce una stringa vuota (”)



Linguaggi dinamici – A.A. 2009/2010
                                                              4
Lettura di un file
   Per leggere una linea alla volta di un file:
     f.readline
   Un approccio molto comodo per leggere
     diverse righe di un file di testo è di iterare
     sull’oggetto file
         for line in f:
             print line




Linguaggi dinamici – A.A. 2009/2010
                                                      5
Scrittura su file
   f.write(string) scrive il contenuto di string nel
     file f, restituendo None
   Per scrivere qualcosa che non sia una stringa
     su un file di testo occorre prima convertirlo in
     stringa:
         value = ('the answer', 42)
         s = str(value)
         f.write(s)




Linguaggi dinamici – A.A. 2009/2010
                                                         6
Lettura/scrittura non sequenziale
   f.tell() restituisce un intero che raprresenta la
     posizione corrente del file f
        Misurata in byte dall’inizio del file
   f.seek(offset, from_what) sposta la posizione
     corrente del file f.
        La posizione è calcolata aggiungendo offset a
          un reference point:
           from_what = 0 misura dall’inizio del file

             (default)
           from_what = 1 dalla posizione corrente

           from_what = 2 dalla fine del file




Linguaggi dinamici – A.A. 2009/2010
                                                          7
ESEMPI:
                                                  file.py
                         Chiusura di un file
   Terminate le operazioni sul file, chiamare
     f.close()
     per chiuderlo e liberare le risorse associate
   Dopo la chiamata f.close(), qualunque tentativo
     di utilizzo del file fallirà automaticamente




Linguaggi dinamici – A.A. 2009/2010
                                                        8
ESEMPI:
                                               fileExcept.py
                              File exception
   ATTENZIONE: quando si utilizzano file,
     bisogna sempre essere pronti a gestire errori
     non attesi
   Meccanismo delle eccezioni: quando viene
     incontrato un problema in un’operazione su
     file, python solleva una IOError exception
   Come sempre, la rappresentazione in stringa
     dell’eccezione descrive il problema




Linguaggi dinamici – A.A. 2009/2010
                                                           9
Modulo os.path
   Il modulo os contiene os.path, un modulo
     molto utile per la manipolazione dei path
   Maggiore portabilità del codice rispetto alla
     manipolazione diretta delle stringhe
     riguardanti percorsi del file system:
       import os.path

          os.path.join(“snakes”, “Python”)
          Produce:
           ‘snakesPython’ (windows)

           ‘snakes/Python’ (osX, unix, linux, …)




Linguaggi dinamici – A.A. 2009/2010
                                                     10
Modulo os.path
   Esiste anche la funzione inversa: os.path.split,
     che separa l’ultimo componente di un path
        Restitiusce una tupla con due componenti: il
          path della directory parente e l’ultimo
          componente del path
        Ad esempio, in windows:
          os.path.split(“C:Program FilesPython25Lib”)
          produce: (‘C:Program FilesPython25’, ‘Lib’)
        Su unix:
          os.path.split(“/usr/bin/python”)
          produce (‘/usr/bin’, ‘python’)

Linguaggi dinamici – A.A. 2009/2010
                                                              11
Contenuto di directory
   Modulo os.listdir
        Restituisce una lista con il contenuto della
          directory (file, sotto-directory, ecc.)
   Ad esempio:
      os.listdir(“C:Program FilesPython25”)
          [‘DLLs’, ‘Doc’, ‘include’, ‘Lib’, ‘libs’,
          ‘LICENSE.txt’, ‘NEWS.txt’, ‘py.ico’, ‘pyc.ico’,
          ‘python.exe’, ‘pythonw.exe’, ‘pywin32-
          wininst.log’, ‘README.txt’,
          ‘Removepywin32.exe’, ‘Scripts’, ‘tcl’, ‘Tools’,
          ‘w9xpopen.exe’]


Linguaggi dinamici – A.A. 2009/2010
                                                            12
ESEMPI:
                                                osExamples.py
                    Contenuto di directory
   Per determinare se un path si riferisce a un file
     o a una directory:
      os.path.isfile restituisce True in caso di file


      os.path.isdir restituisce True in caso di

         directory
   Entrambi restituiscono False se il file non
     esiste
       os.path.isfile(“C:Windows”)
           False
         os.path.isdir(“C:Windows”)
           True

Linguaggi dinamici – A.A. 2009/2010
                                                           13
Operazioni su file e directory
   I moduli shutil e os contengono funzioni per
     operare velocemente sui file
   Operazioni per rinominare, spostare, copiare e
     rimuovere file
   shutil.move si può utilizzare per:
        rinominare un file:
           import shutil
           shutil.move(“server.log”, “server.log.backup”)
        spostare un file in un’altra directory:
           shutil.move(“old mail.txt”, “C:dataarchive”)


Linguaggi dinamici – A.A. 2009/2010
                                                                14
ESEMPI:
                                                        copy.py
            Operazioni su file e directory
   Allo stesso modo funziona shutil.copy:
     shutil.copy(“important.dat”, “C:backups”
   Per cancellare un file:
     os.remove(“junk.dat”)
   Per creare una nuova directory:
        os.mkdir(“C:photoszoosnakes”)
          (la directory parent deve essere esistente)
        os.makedirs(“C:photoszoosnakes”)
          (crea eventualmente tutte le directory parent)
   Per rimuovere una directory vuota:
     os.rmdir(“C:photoszoosnakes”)
Linguaggi dinamici – A.A. 2009/2010
                                                             15
ESEMPI:
                                                globExamples.py
                                Modulo glob
   “Globbing” nel linguaggio degli hacker è
     l’espansione delle wildcard nei nomi di file
   Python fornisce una funzione glob, nel modulo
     glob, che implementa il globbing del contenuto
     di una directory
   La funzione glob.glob riceve in input un glob
     pattern e restituisce una lista di nomi di file/path
   Ad esempio, per elencare il contenuto della
     directory C:Program Files che inizia per M:
     import glob
     glob.glob(“C:Program FilesM*”)
     [‘C:Program FilesMessenger’, … ]
Linguaggi dinamici – A.A. 2009/2010
                                                             16
Modulo pickle
   Come si procede quando si vogliono salvare
     su file strutture dati complesse come list,
     dictionary, istanze di classi?
   Python fornisce un modulo standard chiamato
     pickle, che evita ai programmatori la scrittura
     di codice per il salvataggio / caricamento dati
   Questo modulo può prendere in input
     praticamente qualunque oggetto Python e
     convertirlo in una rappresentazione testuale
     (stringa). Questa operazione è detta pickling
   La ricostruzione dell’oggetto dalla
     rappresentazione in stringa è detta unpickling
Linguaggi dinamici – A.A. 2009/2010
                                                       17
ESEMPI:
                                                    pickling.py
                              Modulo pickle       unpickling.py


   Dato un oggetto x e un oggetto file f aperto in
     scrittura, è sufficiente una sola linea di codice
     per effettuare il pickling:
     pickle.dump(x, f)

   Per effettuare l’unpickling dell’oggetto, se f è
     un oggetto file aperto in lettura:
     x = pickle.load(f)




Linguaggi dinamici – A.A. 2009/2010
                                                             18

Contenu connexe

Tendances

Pe t2 perl-caratteristiche
Pe t2 perl-caratteristichePe t2 perl-caratteristiche
Pe t2 perl-caratteristiche
Majong DevJfu
 
Pe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingPe a3 perl-metaprogramming
Pe a3 perl-metaprogramming
Majong DevJfu
 

Tendances (20)

2006 Py03 intermedio
2006 Py03 intermedio2006 Py03 intermedio
2006 Py03 intermedio
 
Pe t3 perl-moduli
Pe t3 perl-moduliPe t3 perl-moduli
Pe t3 perl-moduli
 
2006 Py01 intro
2006 Py01 intro2006 Py01 intro
2006 Py01 intro
 
T7 librerie
T7 librerieT7 librerie
T7 librerie
 
Pe t2 perl-caratteristiche
Pe t2 perl-caratteristichePe t2 perl-caratteristiche
Pe t2 perl-caratteristiche
 
Pe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingPe a3 perl-metaprogramming
Pe a3 perl-metaprogramming
 
2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#
 
Pe t1 perl-intro
Pe t1 perl-introPe t1 perl-intro
Pe t1 perl-intro
 
Pe t4 perl-oggetti
Pe t4 perl-oggettiPe t4 perl-oggetti
Pe t4 perl-oggetti
 
Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perché
 
T3 esempio runtime
T3 esempio runtimeT3 esempio runtime
T3 esempio runtime
 
Python@Unina - Theory
Python@Unina - TheoryPython@Unina - Theory
Python@Unina - Theory
 
11 I File
11   I File11   I File
11 I File
 
Corso Iphone in 48h
Corso Iphone in 48hCorso Iphone in 48h
Corso Iphone in 48h
 
2006 Py02 base
2006 Py02 base2006 Py02 base
2006 Py02 base
 
Programmazione funzionale e Stream in Java
Programmazione funzionale e Stream in JavaProgrammazione funzionale e Stream in Java
Programmazione funzionale e Stream in Java
 
2008 python
2008 python2008 python
2008 python
 
MS_corso base iOS iPhone_partI
MS_corso base iOS iPhone_partIMS_corso base iOS iPhone_partI
MS_corso base iOS iPhone_partI
 
Spyppolare o non spyppolare
Spyppolare o non spyppolareSpyppolare o non spyppolare
Spyppolare o non spyppolare
 
Bash programming
Bash programmingBash programming
Bash programming
 

En vedette

Py a1 python-unit_testing
Py a1 python-unit_testingPy a1 python-unit_testing
Py a1 python-unit_testing
Majong DevJfu
 
Pe a2 perl-documentazione
Pe a2 perl-documentazionePe a2 perl-documentazione
Pe a2 perl-documentazione
Majong DevJfu
 
9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud
Majong DevJfu
 
Traffic Shaping Su Linux
Traffic Shaping Su LinuxTraffic Shaping Su Linux
Traffic Shaping Su Linux
Majong DevJfu
 
esercizio sigda n 11
esercizio sigda n 11esercizio sigda n 11
esercizio sigda n 11
Majong DevJfu
 
Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04
Majong DevJfu
 
Architettura dei Calcolatori Subroutines80x86
Architettura dei Calcolatori Subroutines80x86Architettura dei Calcolatori Subroutines80x86
Architettura dei Calcolatori Subroutines80x86
Majong DevJfu
 
Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03
Majong DevJfu
 
Linguaggi Formali e Compilazione: Frontend
Linguaggi Formali e Compilazione: FrontendLinguaggi Formali e Compilazione: Frontend
Linguaggi Formali e Compilazione: Frontend
Majong DevJfu
 
4 Livello Ip Parte1 Color
4 Livello Ip Parte1 Color4 Livello Ip Parte1 Color
4 Livello Ip Parte1 Color
Majong DevJfu
 
5 Trasporto Affidabile Teoria
5 Trasporto Affidabile Teoria5 Trasporto Affidabile Teoria
5 Trasporto Affidabile Teoria
Majong DevJfu
 
Sistemi Operativi: Struttura avanzata - Lezione 05
Sistemi Operativi: Struttura avanzata - Lezione 05Sistemi Operativi: Struttura avanzata - Lezione 05
Sistemi Operativi: Struttura avanzata - Lezione 05
Majong DevJfu
 

En vedette (20)

Py a1 python-unit_testing
Py a1 python-unit_testingPy a1 python-unit_testing
Py a1 python-unit_testing
 
Py a5 python-text
Py a5 python-textPy a5 python-text
Py a5 python-text
 
Pe a2 perl-documentazione
Pe a2 perl-documentazionePe a2 perl-documentazione
Pe a2 perl-documentazione
 
9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud
 
Pycon
PyconPycon
Pycon
 
Traffic Shaping Su Linux
Traffic Shaping Su LinuxTraffic Shaping Su Linux
Traffic Shaping Su Linux
 
esercizio sigda n 11
esercizio sigda n 11esercizio sigda n 11
esercizio sigda n 11
 
8 Www2009 Parte1
8 Www2009 Parte18 Www2009 Parte1
8 Www2009 Parte1
 
Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04
 
Architettura dei Calcolatori Subroutines80x86
Architettura dei Calcolatori Subroutines80x86Architettura dei Calcolatori Subroutines80x86
Architettura dei Calcolatori Subroutines80x86
 
Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03
 
Linguaggi Formali e Compilazione: Frontend
Linguaggi Formali e Compilazione: FrontendLinguaggi Formali e Compilazione: Frontend
Linguaggi Formali e Compilazione: Frontend
 
4 Livello Ip Parte1 Color
4 Livello Ip Parte1 Color4 Livello Ip Parte1 Color
4 Livello Ip Parte1 Color
 
2 sistemi informativi d azienda
2 sistemi informativi d azienda2 sistemi informativi d azienda
2 sistemi informativi d azienda
 
3 H2 N Parte3
3 H2 N Parte33 H2 N Parte3
3 H2 N Parte3
 
E6 Concorre
E6 ConcorreE6 Concorre
E6 Concorre
 
5 Trasporto Affidabile Teoria
5 Trasporto Affidabile Teoria5 Trasporto Affidabile Teoria
5 Trasporto Affidabile Teoria
 
Sistemi Operativi: Struttura avanzata - Lezione 05
Sistemi Operativi: Struttura avanzata - Lezione 05Sistemi Operativi: Struttura avanzata - Lezione 05
Sistemi Operativi: Struttura avanzata - Lezione 05
 
9 Ftp Telnet Email
9 Ftp Telnet Email9 Ftp Telnet Email
9 Ftp Telnet Email
 
6 Dns Parte2
6 Dns Parte26 Dns Parte2
6 Dns Parte2
 

Similaire à Py a4 python-file (11)

Presentazione java7
Presentazione java7Presentazione java7
Presentazione java7
 
Java lezione 6
Java lezione 6Java lezione 6
Java lezione 6
 
Programming iOS lezione 3
Programming iOS lezione 3Programming iOS lezione 3
Programming iOS lezione 3
 
Gestione file su android
Gestione file su androidGestione file su android
Gestione file su android
 
Docdigitali 11mag09
Docdigitali 11mag09Docdigitali 11mag09
Docdigitali 11mag09
 
Linux day 2016 la shell in linux
Linux day 2016   la shell in linuxLinux day 2016   la shell in linux
Linux day 2016 la shell in linux
 
Java lezione 19
Java lezione 19Java lezione 19
Java lezione 19
 
File di testo in Java
File di testo in JavaFile di testo in Java
File di testo in Java
 
Pyimproved
PyimprovedPyimproved
Pyimproved
 
Virginio Desktop Analisi
Virginio Desktop   AnalisiVirginio Desktop   Analisi
Virginio Desktop Analisi
 
Programmazione Doc Gest, Codifica
Programmazione   Doc Gest, CodificaProgrammazione   Doc Gest, Codifica
Programmazione Doc Gest, Codifica
 

Plus de Majong DevJfu

8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes
Majong DevJfu
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product line
Majong DevJfu
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation
Majong DevJfu
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture
Majong DevJfu
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio
Majong DevJfu
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles
Majong DevJfu
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture
Majong DevJfu
 
1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product
Majong DevJfu
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles
Majong DevJfu
 
25 architectural adaptation
25 architectural adaptation25 architectural adaptation
25 architectural adaptation
Majong DevJfu
 

Plus de Majong DevJfu (20)

8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product line
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture
 
1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles
 
Uml3
Uml3Uml3
Uml3
 
Uml2
Uml2Uml2
Uml2
 
6
66
6
 
5
55
5
 
4 (uml basic)
4 (uml basic)4 (uml basic)
4 (uml basic)
 
3
33
3
 
2
22
2
 
1
11
1
 
Tmd template-sand
Tmd template-sandTmd template-sand
Tmd template-sand
 
26 standards
26 standards26 standards
26 standards
 
25 architectural adaptation
25 architectural adaptation25 architectural adaptation
25 architectural adaptation
 

Py a4 python-file

  • 1.
  • 2. Apertura di un file open(filename, mode) restituisce un oggetto file filename è il nome del file mode determina la modalità di apertura: 'r' : sola lettura 'w' sola scrittura (un file già esistente verrà sovrascritto) 'a’ append; i dati scritti nel file verranno aggiunti alla fine. 'r+' lettura e scrittura. mode è un argomento opzionale; 'r’ sarà l’assunzione in caso non sia specificato. Linguaggi dinamici – A.A. 2009/2010 2
  • 3. Apertura di un file binario ATTENZIONE: solo per sistemi windows: Python su Windows distingue tra file di testo e binari I caratteri di end-of-line nei file di testo sono automaticamente modificati quando si leggono e scrivono dati 'b' aggiunto al parametro mode apre il file in modalità binaria (ad es. 'rb', 'wb', 'r+b’, …) Su altre piattaforme i due tipi di file sono gestiti allo stesso modo Linguaggi dinamici – A.A. 2009/2010 3
  • 4. Lettura di un file: f.read() Per leggere il contenuto di un file: f.read(size) Legge una certa quantità di dati e la restituisce come stringa size è un argomento opzionale Se size è omesso o negativo verrà letto l’intero contenuto del file: attenzione alla dimensione! Altrimenti, verranno letti e restituiti size byte Quando viene raggiunta la fine del file, f.read() restituisce una stringa vuota (”) Linguaggi dinamici – A.A. 2009/2010 4
  • 5. Lettura di un file Per leggere una linea alla volta di un file: f.readline Un approccio molto comodo per leggere diverse righe di un file di testo è di iterare sull’oggetto file for line in f: print line Linguaggi dinamici – A.A. 2009/2010 5
  • 6. Scrittura su file f.write(string) scrive il contenuto di string nel file f, restituendo None Per scrivere qualcosa che non sia una stringa su un file di testo occorre prima convertirlo in stringa: value = ('the answer', 42) s = str(value) f.write(s) Linguaggi dinamici – A.A. 2009/2010 6
  • 7. Lettura/scrittura non sequenziale f.tell() restituisce un intero che raprresenta la posizione corrente del file f Misurata in byte dall’inizio del file f.seek(offset, from_what) sposta la posizione corrente del file f. La posizione è calcolata aggiungendo offset a un reference point: from_what = 0 misura dall’inizio del file (default) from_what = 1 dalla posizione corrente from_what = 2 dalla fine del file Linguaggi dinamici – A.A. 2009/2010 7
  • 8. ESEMPI: file.py Chiusura di un file Terminate le operazioni sul file, chiamare f.close() per chiuderlo e liberare le risorse associate Dopo la chiamata f.close(), qualunque tentativo di utilizzo del file fallirà automaticamente Linguaggi dinamici – A.A. 2009/2010 8
  • 9. ESEMPI: fileExcept.py File exception ATTENZIONE: quando si utilizzano file, bisogna sempre essere pronti a gestire errori non attesi Meccanismo delle eccezioni: quando viene incontrato un problema in un’operazione su file, python solleva una IOError exception Come sempre, la rappresentazione in stringa dell’eccezione descrive il problema Linguaggi dinamici – A.A. 2009/2010 9
  • 10. Modulo os.path Il modulo os contiene os.path, un modulo molto utile per la manipolazione dei path Maggiore portabilità del codice rispetto alla manipolazione diretta delle stringhe riguardanti percorsi del file system: import os.path os.path.join(“snakes”, “Python”) Produce: ‘snakesPython’ (windows) ‘snakes/Python’ (osX, unix, linux, …) Linguaggi dinamici – A.A. 2009/2010 10
  • 11. Modulo os.path Esiste anche la funzione inversa: os.path.split, che separa l’ultimo componente di un path Restitiusce una tupla con due componenti: il path della directory parente e l’ultimo componente del path Ad esempio, in windows: os.path.split(“C:Program FilesPython25Lib”) produce: (‘C:Program FilesPython25’, ‘Lib’) Su unix: os.path.split(“/usr/bin/python”) produce (‘/usr/bin’, ‘python’) Linguaggi dinamici – A.A. 2009/2010 11
  • 12. Contenuto di directory Modulo os.listdir Restituisce una lista con il contenuto della directory (file, sotto-directory, ecc.) Ad esempio: os.listdir(“C:Program FilesPython25”) [‘DLLs’, ‘Doc’, ‘include’, ‘Lib’, ‘libs’, ‘LICENSE.txt’, ‘NEWS.txt’, ‘py.ico’, ‘pyc.ico’, ‘python.exe’, ‘pythonw.exe’, ‘pywin32- wininst.log’, ‘README.txt’, ‘Removepywin32.exe’, ‘Scripts’, ‘tcl’, ‘Tools’, ‘w9xpopen.exe’] Linguaggi dinamici – A.A. 2009/2010 12
  • 13. ESEMPI: osExamples.py Contenuto di directory Per determinare se un path si riferisce a un file o a una directory: os.path.isfile restituisce True in caso di file os.path.isdir restituisce True in caso di directory Entrambi restituiscono False se il file non esiste os.path.isfile(“C:Windows”) False os.path.isdir(“C:Windows”) True Linguaggi dinamici – A.A. 2009/2010 13
  • 14. Operazioni su file e directory I moduli shutil e os contengono funzioni per operare velocemente sui file Operazioni per rinominare, spostare, copiare e rimuovere file shutil.move si può utilizzare per: rinominare un file: import shutil shutil.move(“server.log”, “server.log.backup”) spostare un file in un’altra directory: shutil.move(“old mail.txt”, “C:dataarchive”) Linguaggi dinamici – A.A. 2009/2010 14
  • 15. ESEMPI: copy.py Operazioni su file e directory Allo stesso modo funziona shutil.copy: shutil.copy(“important.dat”, “C:backups” Per cancellare un file: os.remove(“junk.dat”) Per creare una nuova directory: os.mkdir(“C:photoszoosnakes”) (la directory parent deve essere esistente) os.makedirs(“C:photoszoosnakes”) (crea eventualmente tutte le directory parent) Per rimuovere una directory vuota: os.rmdir(“C:photoszoosnakes”) Linguaggi dinamici – A.A. 2009/2010 15
  • 16. ESEMPI: globExamples.py Modulo glob “Globbing” nel linguaggio degli hacker è l’espansione delle wildcard nei nomi di file Python fornisce una funzione glob, nel modulo glob, che implementa il globbing del contenuto di una directory La funzione glob.glob riceve in input un glob pattern e restituisce una lista di nomi di file/path Ad esempio, per elencare il contenuto della directory C:Program Files che inizia per M: import glob glob.glob(“C:Program FilesM*”) [‘C:Program FilesMessenger’, … ] Linguaggi dinamici – A.A. 2009/2010 16
  • 17. Modulo pickle Come si procede quando si vogliono salvare su file strutture dati complesse come list, dictionary, istanze di classi? Python fornisce un modulo standard chiamato pickle, che evita ai programmatori la scrittura di codice per il salvataggio / caricamento dati Questo modulo può prendere in input praticamente qualunque oggetto Python e convertirlo in una rappresentazione testuale (stringa). Questa operazione è detta pickling La ricostruzione dell’oggetto dalla rappresentazione in stringa è detta unpickling Linguaggi dinamici – A.A. 2009/2010 17
  • 18. ESEMPI: pickling.py Modulo pickle unpickling.py Dato un oggetto x e un oggetto file f aperto in scrittura, è sufficiente una sola linea di codice per effettuare il pickling: pickle.dump(x, f) Per effettuare l’unpickling dell’oggetto, se f è un oggetto file aperto in lettura: x = pickle.load(f) Linguaggi dinamici – A.A. 2009/2010 18