File

Un file è un insieme di dati nella memoria esterna che ha un nome. 

Esistono due tipi di file in Python:
- testo, che contiene testo spezzato su una riga; Dei caratteri speciali nei file di testo, possono esserci solo caratteri di nuova riga ("\n") e ritorno all'inizio della riga ("\r" ;);
- binario, che memorizza qualsiasi dato binario senza restrizioni (ad esempio immagini, suoni, video, ecc.).

Successivamente, prenderemo in considerazione l'utilizzo di file di testo.

 

Il principio di lavorare con un file dal programma
Si compone di tre fasi:
1. apertura di un file;
2. lavorare con il file;
3. chiusura del file.
Questo principio di funzionamento è chiamato "principio sandwich"..

Quando si apre un file, viene indicata la modalità operativa: lettura, scrittura o aggiunta di dati alla fine del file. Il file aperto è bloccato e gli altri programmi non possono accedervi. Dopo aver lavorato con il file, devi chiuderlo per interrompere la connessione con il programma. Quando un file viene chiuso, tutte le modifiche apportate dal programma in questo file vengono scritte su disco. Python lavora con i file tramite variabili di file.

La funzione open() consente di aprire un file e restituisce una variabile di file che può essere utilizzata per accedere al file.
f = open(nome_file, access_mode)
dove:
- file_name - nome del file da aprire
- access_mode - modalità di apertura del file. Può essere: lettura, scrittura, ecc. La modalità predefinita è lettura (r) se non diversamente specificato. 
 
Elenco completo delle modalità di apertura dei file
Modalità Descrizione
r Sola lettura.
w Solo scrivibile. Creerà un nuovo file se non trovato con il nome specificato.
rb Sola lettura (binario).
wb Solo scrittura (binario). Creerà un nuovo file se non trovato con il nome specificato.
r+ Per leggere e scrivere.
rb+ Per leggere e scrivere (binario).
w+ Per leggere e scrivere. Creerà un nuovo file scrivibile se non trovato con il nome specificato.
wb+ Per leggere e scrivere (binario). Creerà un nuovo file scrivibile se non trovato con il nome specificato.
a Si apre per aggiungere nuovi contenuti. Creerà un nuovo file scrivibile se non trovato con il nome specificato.
a+ Si apre per aggiungere nuovi contenuti. Creerà un nuovo file per leggere la voce se non trovata con il nome specificato.
ab Si apre per aggiungere nuovi contenuti (binari). Creerà un nuovo file scrivibile se non trovato con il nome specificato.
ab+ Si apre per aggiungere nuovi contenuti (binari). Creerà un nuovo file per leggere la voce se non trovata con il nome specificato.

 
Il metodo close() ti consente di chiudere un file.

Esempio
Fin = open("input.txt") Fout = apri("output.txt")    # fare qualcosa con i file fout.chiudi() Fin.chiudi() Se un file esistente viene aperto per la scrittura, il suo contenuto viene distrutto. Dopo la fine del programma, tutti i file aperti vengono chiusi automaticamente.
 

Lettura di dati da un file

Durante la lettura di un file di testo, il flusso di byte entra nell'input del programma in sequenza uno dopo l'altro, quindi il file fornisce un accesso sequenziale ai dati. Cioè, se dobbiamo leggere il decimo valore dal file, dobbiamo prima leggere il precedente 9.

La lettura di una singola riga di un file consente l'esecuzione del metodo readline(). Questo metodo viene chiamato su una variabile di file. Fin = open("input.txt") s = Fin.readline()
Alla stringa letta possono essere applicati vari metodi, simili a quelli utilizzati durante la lettura da tastiera (split(), map(), ecc.). Ad esempio, se ci sono due numeri separati da uno spazio in una riga di un file, puoi contarli come segue: Fin = open("input.txt") s = Fin.readline().split() # linea divisa su spazi s = ["2007", "2021"] a, b = map(int, s)         # applica il metodo int() a tutti gli elementi della lista s,   # ovvero convertire la stringa di caratteri in un numero # a, b = int(s[0], s[1])   # questo è lo stesso della riga sopra # a, b = [int(x) for x in s] # uguale a un generatore
Il metodo read() legge l'intero contenuto del file e restituisce una stringa che può contenere i caratteri '\n'. Se un parametro intero viene passato al metodo read(), non verrà letto più del numero specificato di caratteri. Ad esempio, puoi leggere un file byte per byte utilizzando il metodo read(1).
.
All'apertura di un file, il puntatore che determina la posizione corrente nel file viene posto all'inizio del file e, una volta letto, viene spostato nella posizione successiva ai dati letti. Durante la scrittura, il puntatore viene spostato nella successiva posizione libera.

Scrivi dati su file

Il metodo write() è usato per scrivere dati su un file. I dati numerici devono essere convertiti in una stringa. Questo può essere fatto sia con il metodo format() che con il metodo str().

 

File multilinea

Quando si lavora con file multilinea, è necessario sapere quando i dati nel file si esauriscono. Per fare ciò, puoi utilizzare la funzionalità dei metodi readline(): se il cursore del file punta alla fine del file, allora il metodo readline() restituisce un stringa vuota, che viene percepita come un falso valore booleano: mentre Vero:     s = Fin.readline()     se non s: break   # se viene ricevuta una stringa vuota durante la lettura di una stringa,   # il ciclo termina con un'istruzione break     print(s, end="")  # disabilita il newline, perché durante la lettura di una riga da un file                       # carattere di nuova riga "\n" salvato

 

Altri modi per leggere dati da file multilinea
1. Immediatamente tutti i dati nell'elenco. Fin = open("input.txt") list_strings = Fin.readlines()    # leggi tutte le righe contemporaneamente Fin.chiudi() per s in list_strings:     print(s, end="")
2. Usando la costruzione with-as. In questo caso, il file viene chiuso automaticamente dopo la fine del ciclo. con open("input.txt") come Fin:     per s in Fin:         print(s, end="") Questo costrutto assicura che il file sia chiuso. 


3. Un modo per iterare sulle stringhe nello stile del linguaggio Python (si consiglia di utilizzare questo metodo). Anche in questo caso il file viene chiuso automaticamente. per s in open("input.txt"):     print(s, end="")

File cirillico

Se il file contiene lettere russe (qualsiasi carattere con un codice maggiore di 127), è necessario specificare la codifica all'apertura data = open("input.txt", "r", encoding="utf-8")