Come gestire i file in Python

In qualsiasi linguaggio di programmazione, la gestione dei file è un aspetto importante. E Python supporta anche il lavoro con i file in diverse modalità, come leggere e scrivere su file e altro ancora.

Entro la fine di questo tutorial, sarai in grado di:

  • aprire e leggere file in Python,
  • leggere le righe da un file di testo,
  • scrivere e aggiungere ai file e
  • usa i gestori di contesto per lavorare con i file in Python.

Come leggere file in Python

Per aprire un file in Python, puoi usare la sintassi generale: open(‘file_name’,’mode’).

  • Qui, nome_file è il nome del file.

Nota: se il file che desideri aprire si trova nella directory di lavoro corrente, puoi menzionare solo il nome del file. Se si trova in un’altra cartella nel tuo ambiente di lavoro, dovresti includere il percorso del file.

  • La modalità parametro specifica la modalità in cui si desidera aprire il file.

La modalità predefinita per l’apertura di un file è la lettura, indicata dalla lettera ‘r’. Tuttavia, è consigliabile specificare la modalità in modo esplicito.

Prima di iniziare, diamo un’occhiata al file lib.txt, che useremo in questo esempio.

📁 Scarica il file di testo e il codice utilizzati in questo tutorial da questo repository GitHub.

Il frammento di codice seguente mostra come aprire un file di testo ‘lib.txt’ in Python usando la funzione open() e leggerne il contenuto.

file = open('lib.txt','r')
contents = file.read()
print(contents)
file.close()


# Output
Hello, there!
Here are a few helpful Python libraries:
1) NumPy
2) pandas
3) matplotlib
4) seaborn
5) scikit-learn
6) BeautifulSoup
7) Scrapy
8) nltk
9) Bokeh
10) statsmodels

Nell’esempio sopra,

  • La funzione open() restituisce un oggetto file e scegliamo di chiamarlo file.
  • Successivamente, chiamiamo il metodo read() su file.
  • La variabile content contiene ora il contenuto del file. E lo stampiamo.
  • Infine, chiudiamo il file.

Tuttavia, se si dimentica di chiudere il file, ci sarà un possibile spreco di risorse. Se stai lavorando con un numero elevato di tali file, potrebbe esserci un notevole utilizzo della memoria. Questo perché hai aperto diversi file ma non ne hai chiuso nessuno.

Ora, impariamo un modo migliore per aprire i file utilizzando gestori di contesto. Il frammento di codice di seguito mostra come utilizzarli.

with open('lib.txt','r') as f:
  contents = f.read()
  print(contents)

Quando si utilizzano i gestori dei contatti per lavorare con i file, non è necessario utilizzare il metodo close(). I file vengono chiusi automaticamente al termine dell’operazione di I/O.

Come leggere le righe da un file in Python

Nel nostro file di testo di esempio, avevamo solo poche righe. Quindi leggere tutto il contenuto del file in una volta non è stato un problema.

Tuttavia, quando è necessario leggere file di grandi dimensioni, l’utilizzo del metodo read(), come mostrato sopra, potrebbe non essere molto efficiente.

In effetti, se il file di testo è di dimensioni molto grandi, potresti presto esaurire la memoria. Ecco perché potresti voler leggere le righe di sola lettura da un file di testo e imparerai come farlo in questa sezione.

Utilizzo del metodo readline() di Python per leggere le righe da file

Il metodo readline() legge una riga alla volta dal file.

Esegui il seguente frammento di codice.

with open('lib.txt','r') as f:
  line = f.readline()
  print(line)
  line = f.readline()
  print(line)


# Output
Hello, there!

Here are a few helpful Python libraries:

Puoi vedere che dopo la prima chiamata al metodo readline(), la prima riga del file viene stampata. E la seconda chiamata al metodo readline() restituisce la seconda riga nel file.

Questo perché, dopo la prima chiamata al metodo, il puntatore al file si trova all’inizio della seconda riga.

In Python, puoi usare il metodo tell() per ottenere la posizione corrente del puntatore al file. E per spostare il puntatore del file in una posizione specifica, puoi usare il metodo seek().

Nel frammento di codice seguente, utilizziamo f.seek(0) dopo la prima chiamata al metodo. Questo sposta il puntatore del file all’inizio del file di testo. Ecco perché, entrambe le volte, viene stampata la prima riga del file.

with open('lib.txt','r') as f:
  line = f.readline()
  print(line)
  f.seek(0)
  line = f.readline()
  print(line)


# Output
Hello, there!

Hello, there!

Utilizzo del metodo readlines() di Python per leggere le righe da file

C’è un altro metodo strettamente correlato chiamato readlines().

Quando esegui il seguente frammento di codice, vedrai che il metodo readlines() restituisce un elenco di tutte le righe nel file.

with open('lib.txt','r') as f:
  lines = f.readlines()
  print(lines)


# Output
['Hello, there!n', 'Here are a few helpful Python libraries:n', 
'1) NumPyn', '2) pandasn', '3) matplotlibn', 
'4) seabornn', '5) scikit-learnn', '6) BeautifulSoupn', 
'7) Scrapyn', '8) nltkn', '9) Bokehn', '10) statsmodelsn', 'n']

Utilizzo di Python per Loop per leggere le righe da file

Per leggere le righe da un file di testo, puoi anche usare il ciclo for.

Una volta che hai un oggetto file, puoi usare for loop per scorrere i contenuti del file, una riga alla volta e stamparli, come mostrato di seguito. Nota come accediamo a una sola riga alla volta e non leggiamo il contenuto dell’intero file.

with open('lib.txt','r') as f:
  for line in f:
    print(line, end='')

Nota: quando si utilizza la funzione print() di Python, il separatore predefinito è un carattere ‘n’ di nuova riga. Ma nel file originale non abbiamo queste nuove righe. Quindi imposta l’argomento separatore su una stringa vuota: end = ” per stampare il contenuto del file così com’è.

Come leggere blocchi di contenuto da file in Python

In Python, puoi anche scegliere di leggere il contenuto del file in termini di piccoli blocchi.

Leggi il codice qui sotto:

  • Qui, impostiamo chunk_size a 50. Ciò significa che i primi 50 caratteri nel file verranno letti e li stamperemo anche.
  • Ora, chiama il metodo tell() sull’oggetto file f. Puoi vedere che il puntatore del file è ora nella posizione 51, che è come previsto.
chunk_size = 50
with open('lib.txt','r') as f:
  chunk = f.read(chunk_size)
  print(chunk)
  current = f.tell()
  print(f"Current position of file pointer: {current}")

# Output
Hello, there!
Here are a few helpful Python librar
Current position of file pointer: 51

Puoi anche usare questa tecnica per leggere l’intero file in termini di piccoli blocchi.

Il seguente frammento di codice mostra come farlo.

chunk_size = 50
with open('lib.txt','r') as f:
  chunk = f.read(chunk_size)
  print(chunk,end='')

  while(len(chunk)>0):
    chunk = f.read(chunk_size)
    print(chunk,end='')

# Output
Hello, there!
Here are a few helpful Python libraries:
1) NumPy
2) pandas
3) matplotlib
4) seaborn
5) scikit-learn
6) BeautifulSoup
7) Scrapy
8) nltk
9) Bokeh
10) statsmodels

Qui, usiamo un ciclo while per leggere il contenuto del file. Leggiamo il contenuto del file in un blocco di dimensione 50 fino a raggiungere la fine del file. ✅

Come scrivere su file in Python

Per scrivere su un file di testo in Python, dovresti aprirlo in modalità di scrittura, specificando ‘w’.

Il frammento di codice di seguito mostra come farlo.

with open('new_file.txt','w') as f:
  f.write('Hello, Python!')

Vedrai che ‘new_file.txt’ è stato creato nella tua directory di lavoro.

Ora, esegui ancora una volta la cella di codice sopra.

Nel tuo terminale esegui il seguente comando:

cat new_file.txt

# Output: Hello, Python!

Idealmente, abbiamo scritto sul file due volte. Quindi ciao, Python! avrebbe dovuto essere stampato due volte, vero?

Ma vedrai che è stato stampato una sola volta. Bene, questo perché quando apri un file in modalità di scrittura (w), sostanzialmente sovrascrivi il contenuto del file con il nuovo contenuto.

Se desideri aggiungere alla fine del file senza sovrascrivere il contenuto esistente, dovresti aprire il file in modalità di aggiunta. E vedrai come farlo nella prossima sezione.

Come aggiungere a file in Python

Se desideri aggiungere contenuto a un file, senza sovrascriverlo, aprilo in modalità di aggiunta.

Per fare ciò, usa `’a’—a per append—e specifica esplicitamente la modalità.

Quindi, esegui due volte la cella di codice seguente.

with open('new_file.txt','a') as f:
  f.write('Hello, Python!')

Nota come il testo viene stampato due volte ora, come abbiamo aggiunto al file.

cat new_file.txt

# Output: Hello, Python!Hello, Python!

Conclusione

Riassumiamo rapidamente ciò che abbiamo esaminato in questo tutorial.

  • Hai appreso le comuni operazioni di I/O su file come la lettura, la scrittura e l’aggiunta a un file.
  • Inoltre, hai anche imparato come utilizzare il metodo seek() per spostare il puntatore del file in una posizione specifica e
  • come utilizzare il metodo tell() per recuperare la posizione corrente del puntatore al file.

Spero che questo tutorial ti sia stato utile. Ora che hai imparato a lavorare con i file di testo in Python, scopri come lavorare con i file JSON in Python.

Imparentato:

Controlla la lunghezza di un elenco in Python in 3 passaggi.