Lettura e scrittura di elenchi in un file in Python

Introduzione

I programmatori Python utilizzano in modo intensivo array, elenchi e dizionari come strutture di dati serializzate. La memorizzazione di queste strutture di dati in modo persistente richiede un file o un database per funzionare correttamente.

In questo articolo, daremo un'occhiata a come scrivere un elenco su file e come rileggerlo in memoria.

A scrivere i dati in un file, E leggere i dati da un file, il linguaggio di programmazione Python offre i metodi standard write() ed read() per gestire una singola riga, così come writelines() ed readlines() per gestire più righe. Inoltre, sia il pickle e la json i moduli consentono anche modi intelligenti di gestire i set di dati serializzati.

Usando il read () ed write () Metodi

Per gestire i caratteri (stringhe) la base read() ed write() i metodi funzionano egregiamente. Salvataggio di tale elenco riga per riga nel file listfile.txt può essere fatto come segue:


places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

with open('listfile.txt', 'w') as filehandle:
    for listitem in places:
        filehandle.write(f'{listitem}n')

I listitem è esteso da un'interruzione di riga "n", in primo luogo, e quindi archiviato nel file di output. Ora possiamo dare un'occhiata a come leggere l'intero elenco dal file listfile.txt torna in memoria:


places = []


with open('listfile.txt', 'r') as filehandle:
    for line in filehandle:
        
        curr_place = line[:-1]
        
        places.append(curr_place)

Tieni presente che dovrai rimuovere l'interruzione di riga dall'estremità della stringa. In questo caso, ci aiuta che Python consenta anche operazioni di elenco sulle stringhe. Questa rimozione viene eseguita semplicemente come un'operazione di elenco sulla stringa stessa, che mantiene tutto tranne l'ultimo elemento. Questo elemento contiene il carattere "n" che rappresenta l'interruzione di riga sui sistemi UNIX/Linux.

Usando il righe di scrittura() ed righe di lettura() Metodi

Come accennato all'inizio di questo articolo, Python contiene anche i due metodi: writelines() ed readlines() – per scrivere e leggere più righe in un passaggio, rispettivamente. Scriviamo l'intero elenco in un file su disco:


places_list = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

with open('listfile.txt', 'w') as filehandle:
    filehandle.writelines(f"{place for place in places_list}n")

Per leggere l'intero elenco da un file su disco è necessario:


places = []


with open('listfile.txt', 'r') as filehandle:
    filecontents = filehandle.readlines()
    for line in filecontents:
        
        curr_place = line[:-1]
        
        places.append(curr_place)

Il codice sopra segue un approccio più tradizionale preso in prestito da altri linguaggi di programmazione. Scriviamolo in un altro Divinatorio modo:


places = []


with open('listfile.txt', 'r') as filehandle:
    places = [current_place.rstrip() for current_place in filehandle.readlines()]

In primo luogo, il contenuto del file viene letto tramite readlines(). In secondo luogo, in a for loop da ogni riga il carattere di interruzione di riga viene rimosso utilizzando rstrip() metodo. In terzo luogo, la stringa viene aggiunta all'elenco dei luoghi come nuovo elemento dell'elenco.

Rispetto all'elenco precedente, il codice è molto più compatto, ma potrebbe essere più difficile da leggere per i programmatori Python principianti.

Utilizzo del modulo Joblib

I metodi iniziali spiegati finora memorizzano l'elenco in un modo che gli esseri umani possono ancora leggerlo, letteralmente un elenco sequenziale in un file. Questo è ottimo per la creazione di report semplici o l'output di file di esportazione che gli utenti possono utilizzare ulteriormente, come i file CSV. Tuttavia, se il tuo obiettivo è semplicemente serializzare un elenco in un file, che può essere caricato in un secondo momento, non è necessario archiviarlo in un formato leggibile dall'uomo.

I joblib module fornisce il modo più semplice per scaricare un oggetto Python (può essere davvero qualsiasi oggetto):

import joblib

places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

joblib.dump(places, 'places.sav')

places = joblib.load('places.sav')
print(places) 

joblib rimane il modo più semplice e pulito per serializzare oggetti in un formato efficiente e caricarli in un secondo momento. È possibile utilizzare qualsiasi formato arbitrario, ad esempio .sav, .data, ecc. Non importa, entrambi joblib e alternative come pickle leggerà i file bene.

Usando il salamoia Moduli

In alternativa a joblib, possiamo usare pickle! Suo dump() il metodo memorizza l'elenco in modo efficiente come flusso di dati binari. In primo luogo, il file di output listfile.data è aperto per la scrittura binaria ("wb"). In secondo luogo, l'elenco viene archiviato nel file aperto utilizzando il file dump() Metodo:

import pickle

places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

with open('listfile.data', 'wb') as filehandle:
    
    pickle.dump(places, filehandle)

Come passaggio successivo, leggiamo l'elenco dal file come segue. In primo luogo, il file di output listfile.data è aperto binario per la lettura ("rb"). In secondo luogo, l'elenco dei luoghi viene caricato dal file utilizzando il load() Metodo:

import pickle

with open('listfile.data', 'rb') as filehandle:
    
    placesList = pickle.load(filehandle)

I due esempi qui mostrano l'uso delle stringhe. Sebbene, pickle funziona con tutti i tipi di oggetti Python come stringhe, numeri, strutture autodefinite e ogni altra struttura dati incorporata fornita da Python.

Utilizzo del formato JSON

Il formato dei dati binari pickle usi è specifico di Python. Per migliorare l'interoperabilità tra diversi programmi, JavaScript Object Notation (JSON) fornisce uno schema facile da usare e leggibile, e quindi è diventato molto popolare per la serializzazione di file e la loro condivisione tramite API.

Dai un'occhiata alla nostra guida pratica e pratica per l'apprendimento di Git, con le migliori pratiche, gli standard accettati dal settore e il cheat sheet incluso. Smetti di cercare su Google i comandi Git e in realtà imparare esso!

L'esempio seguente mostra come scrivere un elenco di tipi di variabili miste in un file di output utilizzando l'estensione json modulo. Dopo aver aperto il file di output per la scrittura, il file dump() il metodo memorizza l'elenco di base nel file utilizzando la notazione JSON:

import json


basic_list = [1, "Cape Town", 4.6]


with open('listfile.txt', 'w') as filehandle:
    json.dump(basic_list, filehandle)

Rileggere il contenuto del file di output in memoria è semplice come scrivere i dati. Il metodo corrispondente a dump() è chiamato load():

import json


with open('listfile.txt', 'r') as filehandle:
    basic_list = json.load(filehandle)

Conclusione

I diversi metodi che abbiamo mostrato sopra vanno dalla semplice scrittura/lettura dei dati fino al dumping/caricamento dei dati tramite flussi binari usando pickle e JSON. Ciò semplifica la memorizzazione di un elenco in modo persistente e la sua rilettura in memoria.

Timestamp:

Di più da Impilamento