Lese og skrive lister til en fil i Python

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, .dataosv. 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.

Tidstempel:

Mer fra Stackabuse