Het lezen en schrijven van lijsten naar een bestand in Python
als geserialiseerde datastructuren gebruiken Python-programmeurs intensief arrays, lijsten en woordenboeken. Het opslaan van deze datastructuren vereist voortdurend een bestand of een database om mee te werken. Dit artikel beschrijft hoe je een lijst naar een bestand schrijft, en hoe je die lijst terug in het geheugen leest.
om gegevens in een bestand te schrijven en gegevens uit een bestand te lezen, biedt de programmeertaal Python de standaardmethoden write()
en read()
Voor het omgaan met een enkele regel, en writelines()
en readlines()
Voor het omgaan met meerdere lijnen. Verder staan zowel depickle
en dejson
module Slimme manieren toe om ook met seriële datasets om te gaan.
met behulp van de lees-en schrijfmethoden
om met karakters (strings) om te gaan werken de basismethoden uitstekend. Het opslaan van een dergelijke lijst regel voor regel in het bestand listfile.txt
kan als volgt worden gedaan:
# define list of placesplaces = with open('listfile.txt', 'w') as filehandle: for listitem in places: filehandle.write('%s\n' % listitem)
in regel 6 wordt de listitem
uitgebreid met een linebreak” \n”, ten eerste, en opgeslagen in het uitvoerbestand, ten tweede. Om de hele lijst uit het bestand listfile te lezen.txt terug in het geheugen deze Python code laat je zien hoe het werkt:
# 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)
Houd er rekening mee dat je de linebreak van het einde van de string moet verwijderen. In dit geval helpt het ons dat Python ook lijstbewerkingen op strings toestaat. In regel 8 van de code hierboven wordt deze verwijdering gewoon gedaan als een list operatie op de string zelf, die alles behalve het laatste element behoudt. Dit element bevat het teken “\n ” dat de linebreak op UNIX/Linux systemen vertegenwoordigt.
met behulp van de writelines en readlines methoden
zoals vermeld aan het begin van dit artikel bevat Python ook de twee methoden writelines()
en readlines()
om respectievelijk meerdere regels in één stap te schrijven en te lezen. Om de hele lijst naar een bestand op schijf te schrijven is de Python-code als volgt:
# define list of placesplaces_list = with open('listfile.txt', 'w') as filehandle: filehandle.writelines("%s\n" % place for place in places_list)
om de volledige lijst uit een bestand op schijf te lezen, is de Python-code als volgt:
# 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)
de lijst hierboven volgt een meer traditionele benadering die is ontleend aan andere programmeertalen. Om het op een meer Pythonische manier te schrijven, kijk dan naar de onderstaande code:
# define empty listplaces = # open file and read the content in a listwith open('listfile.txt', 'r') as filehandle: places =
nadat het bestand listfile.txt
In regel 5 is geopend, vindt het opnieuw instellen van de lijst volledig plaats in regel 6. Ten eerste wordt de inhoud van het bestand gelezen via readlines()
. Ten tweede, in eenfor
lus van elke regel wordt het linebreak teken verwijderd met behulp van derstrip()
methode. Ten derde wordt de string toegevoegd aan de lijst met plaatsen als een nieuw lijstitem. In vergelijking met de lijst vóór de code is veel compacter, maar kan moeilijker te lezen voor beginnende Python programmeurs.
gebruikmakend van de pickle Module
de verschillende methoden die tot nu toe zijn uitgelegd slaan de lijst op op een manier die mensen nog steeds kunnen lezen. In het geval dat dit niet nodig is de augurk module kan heel handig voor u worden. De methode dump()
slaat de lijst efficiënt op als een binaire datastroom. Ten eerste wordt in regel 7 (in de onderstaande code) het uitvoerbestand listfile.data
geopend voor binair schrijven (“wb”). Ten tweede wordt in regel 9
de lijst opgeslagen in het geopende bestand met behulp van dedump()
methode.
# 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)
als volgende stap lezen we de lijst uit het bestand als volgt. Ten eerste wordt het uitvoerbestand listfile.data
binair geopend voor lezen (“rb”) in regel 4. Ten tweede wordt de lijst met plaatsen uit het bestand geladen met behulp van de load()
methode.
# load additional moduleimport picklewith open('listfile.data', 'rb') as filehandle: # read the data as binary data stream placesList = pickle.load(filehandle)
de twee voorbeelden tonen het gebruik van strings. Hoewel pickle
werkt met alle soorten Python objecten zoals strings, getallen, zelf gedefinieerde structuren, en elke andere ingebouwde datastructuur die Python biedt.
gebruikmakend van het JSON-formaat
Het binaire dataformaat pickle
gebruikt is specifiek voor Python. Om de interoperabiliteit tussen verschillende programma ‘ s te verbeteren biedt de JavaScript Object Notation (JSON) een eenvoudig te gebruiken en leesbaar schema, en werd dus erg populair.
het volgende voorbeeld laat zien hoe je een lijst van gemengde variabele types naar een uitvoerbestand schrijft met behulp van de json module. In regel 4 wordt de basislijst gedefinieerd. Nadat het uitvoerbestand is geopend voor schrijven in regel 7, slaat de methode dump()
de basislijst op in het bestand met behulp van de JSON-notatie.
import json# define list with valuesbasicList = # open output file for writingwith open('listfile.txt', 'w') as filehandle: json.dump(basicList, filehandle)
Het lezen van de inhoud van het uitvoerbestand terug in het geheugen is zo eenvoudig als het schrijven van de gegevens. De corresponderende methode met dump()
heet load()
, en werkt als volgt:
import json# open output file for readingwith open('listfile.txt', 'r') as filehandle: basicList = json.load(filehandle)
conclusie
de verschillende methoden die hierboven worden getoond variëren van eenvoudig schrijven/lezen van gegevens tot het dumpen/laden van gegevens via binaire streams met pickle en JSON. Dit vereenvoudigt het voortdurend opslaan van een lijst en het teruglezen ervan in het geheugen.
Dankbetuigingen
de auteur wil Zoleka Hatitongwe bedanken voor haar steun tijdens de voorbereiding van het artikel.