Lijsten naar een bestand lezen en schrijven in Python

Introductie

Python-programmeurs maken intensief gebruik van arrays, lijsten en woordenboeken als geserialiseerde datastructuren. Het permanent opslaan van deze gegevensstructuren vereist een bestand of een database om goed te werken.

In dit artikel bekijken we hoe u een lijst naar een bestand schrijft en hoe u die lijst weer in het geheugen leest.

Naar schrijf gegevens in een bestand, En gegevens uit een bestand lezen, de programmeertaal Python biedt de standaardmethoden write() en read() voor het omgaan met een enkele regel, evenals: writelines() en readlines() voor het omgaan met meerdere lijnen. Verder zijn zowel de pickle en json modules maken ook slimme manieren mogelijk om met geserialiseerde datasets om te gaan.

De lezen() en schrijven() Methoden

Om met karakters (strings) om te gaan, is de basis read() en write() methoden werken uitstekend. Zo'n lijst regel voor regel in het bestand opslaan listfile.txt kan als volgt:


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

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

De listitem wordt verlengd met een regeleinde "n", eerst, en vervolgens opgeslagen in het uitvoerbestand. Nu kunnen we kijken hoe we de hele lijst uit het bestand kunnen lezen listfile.txt terug in het geheugen:


places = []


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

Houd er rekening mee dat u het regeleinde aan het einde van de tekenreeks moet verwijderen. In dit geval helpt het ons dat Python ook lijstbewerkingen op strings toestaat. Deze verwijdering wordt eenvoudig gedaan als een lijstbewerking op de string zelf, die alles behalve het laatste element behoudt. Dit element bevat het karakter "n" dat staat voor het regeleinde op UNIX/Linux-systemen.

De schrijfregels() en leesregels() Methoden

Zoals aan het begin van dit artikel vermeld, bevat Python ook de twee methoden - writelines() en readlines() โ€“ om respectievelijk meerdere regels in รฉรฉn stap te schrijven en te lezen. Laten we de hele lijst naar een bestand op schijf schrijven:


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

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

Om de volledige lijst van een bestand op schijf te lezen, moeten we:


places = []


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

De bovenstaande code volgt een meer traditionele benadering die is geleend van andere programmeertalen. Laten we het in een meer schrijven Pythonisch manier:


places = []


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

Eerst wordt de bestandsinhoud gelezen via readlines(). Ten tweede, in een for lus van elke regel wordt het regeleinde-teken verwijderd met behulp van de rstrip() methode. Ten derde wordt de string toegevoegd aan de lijst met plaatsen als een nieuw lijstitem.

In vergelijking met de lijst ervoor is de code veel compacter, maar misschien moeilijker te lezen voor beginnende Python-programmeurs.

De Joblib-module gebruiken

De eerste methoden die tot nu toe zijn uitgelegd, slaan de lijst op op een manier dat mensen hem nog steeds kunnen lezen - letterlijk een sequentiรซle lijst in een bestand. Dit is geweldig voor het maken van eenvoudige rapporten of het uitvoeren van exportbestanden die gebruikers verder kunnen gebruiken, zoals CSV-bestanden. Maar als het uw doel is om een โ€‹โ€‹lijst gewoon in een bestand te serialiseren, dat later kan worden geladen, hoeft u het niet in een voor mensen leesbaar formaat op te slaan.

De joblib module biedt de gemakkelijkste manier om een โ€‹โ€‹Python-object te dumpen (kan eigenlijk elk object zijn):

import joblib

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

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

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

joblib blijft de eenvoudigste en schoonste manier om objecten in een efficiรซnt formaat te serialiseren en later te laden. U kunt elk willekeurig formaat gebruiken, zoals: .sav, .data, enz. Het maakt niet echt uit - beide joblib en alternatieven zoals pickle zal de bestanden prima lezen.

De augurk Module

Als een alternatief voor joblib, we kunnen gebruiken pickle! Haar dump() methode slaat de lijst efficiรซnt op als een binaire gegevensstroom. Ten eerste, het uitvoerbestand listfile.data wordt geopend voor binair schrijven ("wb"). Ten tweede wordt de lijst opgeslagen in het geopende bestand met behulp van de dump() methode:

import pickle

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

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

Als volgende stap lezen we de lijst als volgt uit het bestand. Ten eerste, het uitvoerbestand listfile.data wordt binair geopend om te lezen ("rb"). Ten tweede wordt de lijst met plaatsen uit het bestand geladen met de load() methode:

import pickle

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

De twee voorbeelden hier demonstreren het gebruik van strings. Hoewel, pickle werkt met allerlei soorten Python-objecten zoals strings, getallen, zelfgedefinieerde structuren en elke andere ingebouwde datastructuur die Python biedt.

Het JSON-formaat gebruiken

Het binaire gegevensformaat pickle gebruik is specifiek voor Python. Om de interoperabiliteit tussen verschillende programma's te verbeteren, is de JavaScript Object Notation (JSON) biedt een gebruiksvriendelijk en door mensen leesbaar schema en werd daarom erg populair voor het serialiseren van bestanden en het delen ervan via API's.

Bekijk onze praktische, praktische gids voor het leren van Git, met best-practices, door de industrie geaccepteerde normen en bijgevoegd spiekbriefje. Stop met Googlen op Git-commando's en eigenlijk leren het!

Het volgende voorbeeld laat zien hoe u een lijst met gemengde variabele typen naar een uitvoerbestand schrijft met behulp van de json module. Nadat het uitvoerbestand is geopend om te schrijven, wordt de dump() methode slaat de basislijst op in het bestand met behulp van de JSON-notatie:

import json


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


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

Het teruglezen van de inhoud van het uitvoerbestand in het geheugen is net zo eenvoudig als het schrijven van de gegevens. De bijbehorende methode om dump() is genaamd load():

import json


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

Conclusie

Verschillende methoden die we hierboven hebben laten zien, variรซren van het eenvoudig schrijven/lezen van gegevens tot het dumpen/laden van gegevens via binaire streams met behulp van augurk en JSON. Dit vereenvoudigt het permanent opslaan van een lijst en het teruglezen in het geheugen.

Tijdstempel:

Meer van Stapelmisbruik