English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial di base di Python

Controllo dei flussi in Python

Funzione in Python

Tipi di dati in Python

Operazioni di file in Python

Oggetti e classi in Python

Data e ora in Python

Conoscenze avanzate di Python

Manuale di riferimento di Python

E/S de arquivo em Python

Cos'è un file?

Il file è una posizione denominata sul disco utilizzata per memorizzare informazioni correlate. Viene utilizzato per memorizzare permanentemente i dati in memorizzazione non volatile (ad esempio disco rigido).

Poiché la memoria di accesso casuale (RAM) è volatile, i dati persi quando il computer viene spento, quindi usiamo i file per l'uso futuro dei dati.

Quando dobbiamo leggere o scrivere un file, dobbiamo aprirlo prima. Dopo aver completato, deve essere chiuso per liberare le risorse associate al file.

Quindi, nelle operazioni di file in Python, si procede in questo ordine.

  1. Apri il file

  2. Leggi o scrivi (eseguire l'operazione)

  3. Chiudi il file

Come aprire un file?

Python ha una funzione integrata open() per aprire file. Questa funzione restituisce un oggetto file, noto anche come handle, poiché viene utilizzato per leggere o modificare il file in modo appropriato.

>>> f = open("test.txt") # Apri il file nella directory corrente
>>> f = open("C:/Python33/README.txt") # Specifica il percorso completo

Possiamo specificare il modello quando apriamo un file. Nel modello, specifichiamo se leggere 'r', scrivere 'w' o aggiungere 'a' al file. Specifichiamo anche se aprire il file in modalità testuale o binaria.

L'impostazione predefinita è leggere in modalità testuale. In questa modalità, quando si legge da un file, si ottiene una stringa.

D'altra parte, la modalità binaria restituisce byte, che è il modo utilizzato per gestire file non testuali (ad esempio immagini o file exe).

Modalità file Python
ModalitàDescrizione
'r'Apri il file per leggere. (Predefinito)
'w'Apri il file per scrivere. Se non esiste, crea un nuovo file, o se esiste, lo tronca.
'x'Apri il file per la creazione esclusiva. Se il file esiste, l'operazione fallisce.
'a'Apri per aggiungere alla fine del file senza troncare. Se non esiste, crea un nuovo file.
't'Apri in modalità testuale. (Predefinito)
'b'Apri in modalità binaria.
'+'Apri il file per l'aggiornamento (leggere e scrivere)
f = open("test.txt") # Equivalente a "r" o "rt"
f = open("test.txt",'w') # Scrivi in modalità testuale
f = open("img.bmp",'r+b') # Leggi e scrivi in modalità binaria

A differenza di altri linguaggi, il carattere 'a' non suggerisce il numero 97 prima di essere codificato in ASCII (o in un'equivalente codifica).

Inoltre, la codifica predefinita dipende dalla piattaforma. In Windows è 'cp1252', ma 'utf-8' in Linux.

Quindi, non possiamo neanche affidarci alla codifica predefinita, altrimenti il comportamento del nostro codice su diverse piattaforme potrebbe differire.

Quindi, quando si gestiscono file in modalità testuale, si consiglia vivamente di specificare il tipo di codifica.

f = open("test.txt",mode='r',encoding='utf-8')

Come chiudere un file in Python?

Dopo aver completato le operazioni sul file, dobbiamo chiudere il file correttamente.

Chiudere il file rilascia le risorse associate al file e viene completato utilizzando il metodo close().

Python ha un garbage collector per pulire gli oggetti non riferiti, ma non possiamo assolutamente contare su di esso per chiudere i file.

f = open("test.txt",encoding='utf-8')
# Eseguire operazioni su file
f.close()

Questo metodo non è completamente sicuro. Se si verifica un'eccezione durante alcune operazioni sul file, il codice esce senza chiudere il file.

Un metodo più sicuro è utilizzaretry ... finallyblocco.

try:
   f = open("test.txt",encoding='utf-8')
   # Eseguire operazioni su file
finally:
   f.close()

In questo modo, possiamo garantire che il file venga chiuso correttamente anche se si verifica un'eccezione, il che porta a fermare il flusso del programma.

Il miglior metodo è utilizzare la statement with. Questo garantisce che il file venga chiuso quando si esce dal blocco interno.

Non dobbiamo chiamare esplicitamente il metodo close(). Viene fatto internamente.

with open("test.txt",encoding='utf-8') as f:
   # Eseguire operazioni su file

Come scrivere un file in Python?

Per scrivere un file in Python, possiamo scrivere in modalità 'w', aggiungere in modalità 'a' o creare in modo esclusivo in modalità 'x'.

Dobbiamo usare con cautela il modello 'w', poiché sovrascrive il file (se esiste). Tutti i dati precedenti vengono eliminati.

La scrittura di stringhe o sequenze di byte (per file binari) viene completata utilizzando il metodo write(). Questo metodo restituisce il numero di caratteri scritti nel file.

with open("test.txt",'w',encoding='utf-8') as f:
   f.write("my first file\n")
   f.write("This file\n\n")
   f.write("contains three lines\n")

Se 'test.txt' non esiste, il programma creerà un nuovo file chiamato. Se esiste già, lo sovrascriverà.

Dobbiamo includere manualmente i caratteri di newline per distinguere le diverse righe.

Come leggere un file in Python?

Per leggere un file con Python, dobbiamo aprire il file in modalità di lettura.

Ci sono diversi metodi disponibili per questo scopo. Possiamo utilizzare il metodo read(size) per leggereDimensioneDati. Se non specificatoDimensioneParametro, che legge e restituisce fino alla fine del file.

>>> f = open("test.txt",'r',encoding = 'utf-8')
>>> f.read(4)           # Leggi i primi 4 dati
'This'
>>> f.read(4)           # Leggi i prossimi 4 dati
'è'
>>> f.read()           # Leggi il resto fino alla fine del file
'my first file\nThis file\ncontiene tre righe\n'
>>> f.read()           # Leggi ulteriormente e restituisce una stringa vuota

Possiamo vedere che il metodo read() restituisce il newline come '\n'. Dopo aver raggiunto la fine del file, otterremo una stringa vuota nella lettura successiva.

Possiamo utilizzare il metodo seek() per cambiare il cursore corrente del file. Allo stesso modo, il metodo tell() restituisce la nostra posizione corrente (in numeri di byte).

>>> f.tell()           # Ottieni la posizione corrente del file
56
>>> f.seek(0)           # Sposta il cursore del file alla posizione iniziale
0
>>> print(f.read())       # Leggi tutto il file
Questo è il mio primo file
Questo file
contiene tre righe

Possiamo utilizzareCiclo forLeggi riga per riga il file. Questo è sia efficiente che veloce.

>>> for line in f:
...                   print(line, end = '')
...
Questo è il mio primo file
Questo file
contiene tre righe

Le righe del file stesso hanno il newline '\n'.

Inoltre, il parametro finale di print() evita due newline durante la stampa.

O, possiamo utilizzare il metodo readline() per leggere le singole righe del file. Questo metodo legge il file fino al carattere di newline, inclusi i newline.

>>> f.readline()
'Questo è il mio primo file\n'
>>> f.readline()
'Questo file\n'
>>> f.readline()
'contiene tre righe\n'
>>> f.readline()

Infine, il metodo readlines() restituisce l'elenco delle rimanenti righe del file. Quando si raggiunge la fine del file (EOF), tutti questi metodi di lettura restituiranno un valore vuoto.

>>> f.readlines()
['Questo è il mio primo file\n', 'Questo file\n', 'contiene tre righe\n']

Ecco l'elenco completo dei metodi in modalità di testo, con una breve descrizione.

L'oggetto file ha molti metodi disponibili. Alcuni sono stati utilizzati negli esempi precedenti.

L'oggetto file ha molti metodi disponibili. Alcuni sono stati utilizzati negli esempi precedenti.

Ecco l'elenco completo dei metodi in modalità di testo, con una breve descrizione.
Metodi di file di Pythonclose()
Chiude il file.detach()
Restituisce lo stream originale separato dal buffer (raw stream).fileno()
Restituisce il numero numerico che rappresenta lo stream dall'angolo di vista del sistema operativo.flush()
Aggiorna il buffer interno.isatty()
Restituisce se il flusso di file è interattivo.Restituisce il contenuto del file.
read()Restituisce se è possibile leggere il flusso di file.
readline()Restituisce una riga nel file.
readlines()Restituisce una lista di righe nel file.
seek()Modifica la posizione del file.
seekable()Restituisce se il file ci permette di modificare la posizione del file.
tell()Restituisce la posizione corrente del file.
truncate()Adeguata la dimensione del file a una dimensione specifica.
writeable()Restituisce se è possibile scrivere nel file.
write()Scrivi una stringa specifica in un file.
writelines()Scrivi una lista di stringhe in un file.