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