con Python é possibile gestire i files
sintassi
- aprire il file
per prima cosa si crea un oggetto file con open()
oggetto = open('nome file') se il file é nella stessa directory in lettura
oggetto = open('path/nome file') se il file é in una data directory (relativo o assoluto) in lettura
oggetto = open('path/nome file','modo') apre il file in un certo modo
modi file di testo
- open('...','r') apre il file in lettura (default): se non esiste da errore
- open('...','w') apre il file in scrittura: se il file non esiste viene creato, se esiste viene ricreato cancellando quello esistente (sovrascrittura)
- open('...','a') apre il file in append: aggiunge contenuto, se il file non esiste viene creato
- open('...','x') apre il file in esclusiva: se il file non esiste, restituisce un errore, altrimenti apre in scrittura cancellando il contenuto del file
- open('...','r+') apre il file in modifica: permette di leggere e scrivere contemporaneamente
- open('...','w+') apre il file in modifica: permette di leggere e scrivere contemporaneamente + cancella il contenuto del file.
se si gestisce file binari occorre aggiungere b al modo: rb, wb, ab ,xb ,r+b,w+b
- gestione file
una volta aperto con un certo modo lo puoi gestire
vedi dir(oggetto) per avere l'elenco delle funzioni dopo averlo aperto
- oggetto.name ritorna il nome del file
- oggetto.mode ritorna il modo di apertura
leggi/scrivi
- oggetto.read() legge e ritorna il resto contenuto come stringa (se non spostato inizia dall'inizio)
- oggetto.read(x) legge e ritorna x caratteri del testo
- oggetto.readline() legge e ritorna una singola riga di testo del file
- oggetto.readlines() legge e ritorna una lista di stringhe (simile a C File.ReadAllLines())
- oggetto.write('testo') scrivere nel file (simile a C File.WriteAllText()) + restituisce il numero di caratteri scritti
- oggetto.writelines(lista) scrivere nel file le righe di una lista di stringhe (simile a C File.WriteAllLines())
spostandosi nel file
- oggetto.tell() restituisce la posizione corrente in cui ci si trova nel oggetto file
- oggetto.seek(x) spostamento in assoluto in base inizio file di x caratteri + restituisce posizione
- oggetto.seek(x,012) 0 (default) spostamento in assoluto in base inizio / 1 spostamento in base all'attuale posizione / 2 spostamento in base alla fine del file
gestione righe file tramite for
é possibile fare un ciclo for per gestire ciascua riga del file
for riga in oggetto:
riga
- chiudere il file
alla fine il file oggetto va chiuso oggetto.closed
utilizzo di with
supporta context manager
é possibile gestire l'apertura, lettura e scrittura dei file anche utilizzando with
evita di dimenticarsi di chiudere il file
esempio: creo/apro un file e scrivo due righe + visualizzo
f = open('test.txt', 'w') apro file di testo in srittura (cancellandolo) o lo creo se non esiste
dir(f) lista delle funzoni disponibile per l'oggetto f (tipo file)
f.name visualizzo nome del file
f.mode visualizzo il modo
f.write('prima riga del file\n') scrive la prima riga
f.write('seconda riga del file\n') scrive la seconda riga
f.close() chiudo il file
f = open('test.txt') apro in lettura
testo = f.read() memorizzo in una variabile il testo
print(content) visualizzo la variabile testo e quindi il testo del file
f.close() chiudo il file
esempio: scrittura e lettura lista
lines = [ ceriamo la lista di stringhe
'prima riga del file\n',
'seconda riga del file\n',
'terza riga del file\n',
]
scrittura della lista nel file
f = open('test.txt', 'w') apriamo il file in scrittura
f.writelines(lines) usiamo il metodo writelines per scrivere le righe nel file
f.close() chiudiamo il file
lettura del file in una lista
f = open('test.txt') riapriamo il file in lettura
f.readlines() usiamo il metodo readlines per ottenere una lista di righe del file (['prima riga del file\n', 'seconda riga del file\n', 'terza riga del file\n'])
f.close() chiudiamo il file
lettura del file riga per riga
f = open('test.txt') riapriamo il file in lettura
f.readline() usiamo il metodo readline per ottenere una singola riga del file ('prima riga del file\n')
f.readline() usiamo il metodo readline per ottenere una singola riga del file ('seconda riga del file\n')
f.readline() usiamo il metodo readline per ottenere una singola riga del file ('terza riga del file\n')
f.readline() quando abbiamo letto tutto, il metodo restituisce una stringa vuota ('')
f.close() chiudiamo il file
utilizzo un for per iterare sulle righe di un file
f = open('test.txt') riapriamo il file in lettura
for riga in f: iteriamo sulle righe del file
riga
'prima riga del file\n'
'seconda riga del file\n'
'terza riga del file\n'
f.close() chiudiamo il file
esempio: scrittura e lettura con spostamento nel file
lines = [ definiamo una lista di righe
'prima riga del file\n',
'seconda riga del file\n',
'terza riga del file\n',
]
f = open('test.txt', 'w') apriamo il file in scrittura
f.writelines(lines) usiamo il metodo writelines per scrivere le righe nel file
f.seek(0, 0) eseguiamo un seek per spostarci all'inizio del file (0)
f.write('PRIMA') scriviamo 'PRIMA' all'inizio del file sovrascrivendo il testo 'prima' e non il resto della riga (5)
f.seek(0, 2) eseguiamo un seek per spostarci alla fine del file (62)
f.write('quarta riga del file\n') aggiungiamo una riga alla fine (21)
f.close() chiudiamo il file
f = open('test.txt') riapriamo il file in lettura
f.readline() usiamo il metodo readline per ottenere una singola riga del file ('PRIMA riga del file\n')
f.readline() usiamo il metodo readline per ottenere un'altra riga del file ('seconda riga del file\n')
f.tell() # vediamo che la posizione nel file è avanzata
42
f.read() usiamo il metodo read per leggere il resto del contenuto del file ('terza riga del file\nquarta riga del file\n')
f.tell() vediamo che la posizione nel file è avanzata ulteriormente
83
f.read() quando abbiamo letto tutto, il metodo restituisce una stringa vuota ('')
f.seek(0) eseguiamo un seek per spostarci all'inizio del file (0)
f.tell() vediamo che la posizione è ritornata a 0
0
f.readlines() rileggiamo l'intero contenuto del file come lista di stringhe
['PRIMA riga del file\n', 'seconda riga del file\n', 'terza riga del file\n', 'quarta riga del file\n']
f.close() chiudiamo il file