Articles

Lettura e scrittura di elenchi in un file in Python

Come strutture dati serializzate, i programmatori Python utilizzano intensamente array, elenchi e dizionari. L’archiviazione di queste strutture dati richiede in modo persistente un file o un database con cui lavorare. Questo articolo descrive come scrivere un elenco su file e come leggerlo nuovamente in memoria.

Per scrivere dati in un file, e per leggere i dati da un file, il linguaggio di programmazione Python offre i metodi standard write() e read() trattare con un’unica linea, come pure writelines() e readlines() per la gestione di più linee. Inoltre, sia il modulopickle che il modulojson consentono anche modi intelligenti di gestire set di dati serializzati.

Utilizzando i metodi di lettura e scrittura

Per gestire caratteri (stringhe) i metodi di base funzionano in modo eccellente. Il salvataggio di tale elenco riga per riga nel file listfile.txt può essere fatto come segue:

# define list of placesplaces = with open('listfile.txt', 'w') as filehandle: for listitem in places: filehandle.write('%s\n' % listitem)

Nella riga 6 il listitem viene esteso da un linebreak “\n”, in primo luogo, e memorizzato nel file di output, in secondo luogo. Per leggere l’intero elenco dal file listfile.txt torna in memoria questo codice Python ti mostra come funziona:

# define an empty listplaces = # open file and read the content in a listwith open('listfile.txt', 'r') as filehandle: for line in filehandle: # remove linebreak which is the last character of the string currentPlace = line # add item to the list places.append(currentPlace)

Tieni presente che dovrai rimuovere il linebreak dalla fine della stringa. In questo caso ci aiuta che Python consente anche operazioni di elenco su stringhe. Nella riga 8 del codice sopra questa rimozione viene semplicemente eseguita come operazione di elenco sulla stringa stessa, che mantiene tutto tranne l’ultimo elemento. Questo elemento contiene il carattere “\ n ” che rappresenta il linebreak sui sistemi UNIX / Linux.

Utilizzando i metodi writelines e readlines

Come menzionato all’inizio di questo articolo Python contiene anche i due metodiwritelines() ereadlines() per scrivere e leggere più righe in un unico passaggio, rispettivamente. Per scrivere l’intero elenco su un file su disco il codice Python è il seguente:

# define list of placesplaces_list = with open('listfile.txt', 'w') as filehandle: filehandle.writelines("%s\n" % place for place in places_list)

Per leggere l’intero elenco da un file su disco il codice Python è il seguente:

# define empty listplaces = # open file and read the content in a listwith open('listfile.txt', 'r') as filehandle: filecontents = filehandle.readlines() for line in filecontents: # remove linebreak which is the last character of the string current_place = line # add item to the list places.append(current_place)

L’elenco qui sopra segue un approccio più tradizionale preso in prestito da altri linguaggi di programmazione. Per scriverlo in modo più pitonico date un’occhiata al codice qui sotto:

# define empty listplaces = # open file and read the content in a listwith open('listfile.txt', 'r') as filehandle: places = 

Dopo aver aperto il file listfile.txt nella riga 5, il ripristino della lista avviene interamente nella riga 6. Innanzitutto, il contenuto del file viene letto tramite readlines(). In secondo luogo, in un ciclo for da ogni riga il carattere di interruzione di riga viene rimosso utilizzando il metodo rstrip(). In terzo luogo, la stringa viene aggiunta all’elenco di luoghi come nuova voce di elenco. In confronto con l’elenco prima che il codice è molto più compatto, ma può essere più difficile da leggere per i programmatori Python principianti.

Utilizzando il modulo pickle

I diversi metodi spiegati fino ad ora memorizzano l’elenco in modo che gli esseri umani possano ancora leggerlo. Nel caso in cui questo non sia necessario, il modulo pickle potrebbe diventare molto utile per te. Il suo metododump() memorizza l’elenco in modo efficiente come un flusso di dati binario. Innanzitutto, nella riga 7 (nel codice sottostante) il file di output listfile.data viene aperto per la scrittura binaria (“wb”). In secondo luogo, nella riga 9
l’elenco viene memorizzato nel file aperto utilizzando il metodo dump().

# load additional moduleimport pickle# define a list of placesplacesList = with open('listfile.data', 'wb') as filehandle: # store the data as binary data stream pickle.dump(placesList, filehandle)

Come passo successivo leggiamo l’elenco dal file come segue. In primo luogo, il file di output listfile.data è aperto binario per la lettura (“rb”) nella riga 4. In secondo luogo, l’elenco dei luoghi viene caricato dal file utilizzando il metodo load().

# load additional moduleimport picklewith open('listfile.data', 'rb') as filehandle: # read the data as binary data stream placesList = pickle.load(filehandle)

I due esempi qui dimostrano l’uso delle stringhe. Sebbene,pickle funzioni con tutti i tipi di oggetti Python come stringhe, numeri, strutture auto-definite e ogni altra struttura dati incorporata fornita da Python.

Utilizzando il formato JSON

Il formato di dati binaripickle utilizza è specifico per Python. Per migliorare l’interoperabilità tra i diversi programmi JavaScript Object Notation (JSON) fornisce uno schema facile da usare e leggibile, e quindi è diventato molto popolare.

Il seguente esempio mostra come scrivere un elenco di tipi di variabili miste in un file di output usando il modulo json. Nella riga 4 viene definito l’elenco di base. Dopo aver aperto il file di output per la scrittura nella riga 7, il metododump() memorizza l’elenco di base nel file utilizzando la notazione JSON.

import json# define list with valuesbasicList = # open output file for writingwith open('listfile.txt', 'w') as filehandle: json.dump(basicList, filehandle)

Leggere il contenuto del file di output in memoria è semplice come scrivere i dati. Il metodo corrispondente a dump() è denominato load() e funziona come segue:

import json# open output file for readingwith open('listfile.txt', 'r') as filehandle: basicList = json.load(filehandle)

Conclusione

I diversi metodi sopra indicato vanno dalla semplice scrittura/lettura dei dati di dumping/caricamento dati tramite i flussi binari utilizzando sottaceto e JSON. Ciò semplifica la memorizzazione di un elenco in modo persistente e la sua lettura in memoria.

Ringraziamenti

L’autore desidera ringraziare Zoleka Hatitongwe per il suo supporto durante la preparazione dell’articolo.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *