Introduksjon
Python-programmerere bruker intensivt arrays, lister og ordbøker som serialiserte datastrukturer. Å lagre disse datastrukturene vedvarende krever enten en fil eller en database for å fungere ordentlig.
I denne artikkelen skal vi ta en titt på hvordan du skriver en liste til fil, og hvordan du leser den listen tilbake i minnet.
Til skrive data i en fil, og til lese data fra en fil, tilbyr programmeringsspråket Python standardmetodene write()
og read()
for å håndtere en enkelt linje, samt writelines()
og readlines()
for å håndtere flere linjer. Videre er både pickle
og json
moduler tillater smarte måter å håndtere serialiserte datasett også.
Bruke lese() og skrive() Metoder
For å håndtere tegn (strenger) det grunnleggende read()
og write()
metodene fungerer utmerket. Lagre en slik liste linje for linje i filen listfile.txt
kan gjøres som følger:
places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']
with open('listfile.txt', 'w') as filehandle:
for listitem in places:
filehandle.write(f'{listitem}n')
De listitem
utvides med et linjeskift "n"
, først, og deretter lagret i utdatafilen. Nå kan vi ta en titt på hvordan du leser hele listen fra filen listfile.txt
tilbake i minnet:
places = []
with open('listfile.txt', 'r') as filehandle:
for line in filehandle:
curr_place = line[:-1]
places.append(curr_place)
Husk at du må fjerne linjeskiftet fra slutten av strengen. I dette tilfellet hjelper det oss at Python også tillater listeoperasjoner på strenger. Denne fjerningen gjøres ganske enkelt som en listeoperasjon på selve strengen, som beholder alt bortsett fra det siste elementet. Dette elementet inneholder tegnet "n"
som representerer linjeskiftet på UNIX/Linux-systemer.
Bruke skrifter () og leselinjer() Metoder
Som nevnt i begynnelsen av denne artikkelen, inneholder Python også de to metodene – writelines()
og readlines()
– å skrive og lese flere linjer i ett trinn, henholdsvis. La oss skrive hele listen til en fil på disken:
places_list = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']
with open('listfile.txt', 'w') as filehandle:
filehandle.writelines(f"{place for place in places_list}n")
For å lese hele listen fra en fil på disk må vi:
places = []
with open('listfile.txt', 'r') as filehandle:
filecontents = filehandle.readlines()
for line in filecontents:
curr_place = line[:-1]
places.append(curr_place)
Koden ovenfor følger en mer tradisjonell tilnærming lånt fra andre programmeringsspråk. La oss skrive det i en mer Pytonisk vei:
places = []
with open('listfile.txt', 'r') as filehandle:
places = [current_place.rstrip() for current_place in filehandle.readlines()]
Først leses filinnholdet via readlines()
. For det andre, i en for
løkke fra hver linje linjeskifttegnet fjernes ved hjelp av rstrip()
metode. For det tredje legges strengen til listen over steder som et nytt listeelement.
Sammenlignet med oppføringen før er koden mye mer kompakt, men kan være vanskeligere å lese for nybegynnere Python-programmerere.
Bruke Joblib-modulen
De første metodene som er forklart til nå lagrer listen på en måte som mennesker fortsatt kan lese den – bokstavelig talt en sekvensiell liste i en fil. Dette er flott for å lage enkle rapporter eller skrive ut eksportfiler for brukere til videre bruk, for eksempel CSV-filer. Men - hvis målet ditt er å bare serialisere en liste til en fil, som kan lastes inn senere, er det ikke nødvendig å lagre den i et menneskelig lesbart format.
De joblib
modulen gir den enkleste måten å dumpe et Python-objekt (kan egentlig være et hvilket som helst objekt):
import joblib
places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']
joblib.dump(places, 'places.sav')
places = joblib.load('places.sav')
print(places)
joblib
er fortsatt den enkleste og reneste måten å serialisere objekter i et effektivt format, og laste dem inn senere. Du kan bruke hvilket som helst vilkårlig format, som f.eks .sav
, .data
osv. Det spiller ingen rolle – begge deler joblib
og alternativer som pickle
vil lese filene helt fint.
Bruke pickle Moduler
Som et alternativ til joblib
, Vi kan bruke pickle
! Det er dump()
metoden lagrer listen effektivt som en binær datastrøm. For det første utdatafilen listfile.data
er åpnet for binær skriving ("wb"
). For det andre lagres listen i den åpnede filen ved å bruke dump()
metode:
import pickle
places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']
with open('listfile.data', 'wb') as filehandle:
pickle.dump(places, filehandle)
Som neste trinn leser vi listen fra filen som følger. For det første utdatafilen listfile.data
åpnes binær for lesing ("rb"
). For det andre lastes listen over steder fra filen ved hjelp av load()
metode:
import pickle
with open('listfile.data', 'rb') as filehandle:
placesList = pickle.load(filehandle)
De to eksemplene her demonstrerer bruken av strenger. Selv om, pickle
fungerer med alle slags Python-objekter som strenger, tall, selvdefinerte strukturer og alle andre innebygde datastrukturer som Python gir.
Bruker JSON-formatet
Det binære dataformatet pickle
bruker er spesifikk for Python. For å forbedre interoperabiliteten mellom forskjellige programmer JavaScript Object Notation (JSON) gir et brukervennlig og lesbart skjema, og ble dermed veldig populært for å serialisere filer og dele dem over APIer.
Sjekk ut vår praktiske, praktiske guide for å lære Git, med beste praksis, bransjeaksepterte standarder og inkludert jukseark. Slutt å google Git-kommandoer og faktisk lære den!
Følgende eksempel viser hvordan du skriver en liste over blandede variabeltyper til en utdatafil ved hjelp av JSON modul. Etter å ha åpnet utdatafilen for skriving, dump()
metoden lagrer den grunnleggende listen i filen ved å bruke JSON-notasjonen:
import json
basic_list = [1, "Cape Town", 4.6]
with open('listfile.txt', 'w') as filehandle:
json.dump(basic_list, filehandle)
Å lese innholdet i utdatafilen tilbake til minnet er like enkelt som å skrive dataene. Den tilsvarende metoden til dump()
heter load()
:
import json
with open('listfile.txt', 'r') as filehandle:
basic_list = json.load(filehandle)
konklusjonen
Ulike metoder vi har vist ovenfor spenner fra enkel skriving/lesing av data til dumping/lasting av data via binære strømmer ved bruk av pickle og JSON. Dette forenkler å lagre en liste vedvarende og lese den tilbake i minnet.