Articles

Læsning og skrivning af lister til en fil i Python

som serialiserede datastrukturer bruger Python-programmører intensivt arrays, lister og ordbøger. Lagring af disse datastrukturer vedvarende kræver enten en fil eller en database til at arbejde med. Denne artikel beskriver, hvordan man skriver en liste til fil, og hvordan man læser denne liste tilbage i hukommelsen.

for at skrive data i en fil og for at læse data fra en fil tilbyder Python-programmeringssproget standardmetodernewrite() ogread() til håndtering af en enkelt linje samtwritelines() ogreadlines() til håndtering af flere linjer. Desuden tillader bådepickle ogjson modulet også smarte måder at håndtere serialiserede datasæt på.

brug af læse-og skrivemetoderne

til at håndtere tegn (strenge) fungerer de grundlæggende metoder fremragende. Lagring af en sådan liste linje for linje i filen listfile.txt kan gøres som følger:

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

i linje 6 listitem udvides med en linebreak” \n ” for det første og gemmes i outputfilen for det andet. For at læse hele listen fra fillistenfil.denne Python-kode viser dig, hvordan den fungerer:

# 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)

Husk, at du skal fjerne linebreak fra slutningen af strengen. I dette tilfælde hjælper det os, at Python tillader liste operationer på strenge, også. I linje 8 i koden ovenfor udføres denne fjernelse simpelthen som en listeoperation på selve strengen, som holder alt andet end det sidste element. Dette element indeholder tegnet “\ n”, der repræsenterer linjeskiftet på systemerne.

brug af skrivelinjer og readlines metoder

Som nævnt i begyndelsen af denne artikel Python indeholder også de to metoderwritelines() ogreadlines() til at skrive og læse flere linjer i henholdsvis et trin. For at skrive hele listen til en fil på disken er Python-koden som følger:

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

for at læse hele listen fra en fil på disken er Python-koden som følger:

# 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)

listen ovenfor følger en mere traditionel tilgang lånt fra andre programmeringssprog. For at skrive det på en mere pythonisk måde skal du se på koden nedenfor:

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

efter at have åbnet filen listfile.txt i linje 5 finder genoprettelsen af listen sted helt i linje 6. For det første læses filindholdet via readlines(). For det andet fjernes linebreak-tegnet i en for loop fra hver linje ved hjælp af rstrip() – metoden. For det tredje tilføjes strengen til listen over steder som et nyt listeelement. I sammenligning med noteringen før koden er meget mere kompakt, men kan være sværere at læse for begyndere Python programmører.

brug af pickle-modulet

de forskellige metoder, der hidtil er forklaret, gemmer listen på en måde, som mennesker stadig kan læse den. Hvis dette ikke er nødvendigt, kan pickle-modulet blive ret praktisk for dig. Dens dump() metode gemmer listen effektivt som en binær datastrøm. For det første åbnes outputfilen listfile.data i linje 7 (i koden nedenfor) for binær skrivning. For det andet gemmes listen i linje 9
i den åbne fil ved hjælp af dump() – metoden.

# 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)

som næste trin læser vi listen fra filen som følger. For det første åbnes outputfilen listfile.data binær til læsning (“rb”) i linje 4. For det andet indlæses listen over steder fra filen ved hjælp af load() – metoden.

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

de to eksempler her viser brugen af strenge. Selvom pickle arbejder med alle slags Python-objekter som strenge, tal, selvdefinerede strukturer og enhver anden indbygget datastruktur, Python giver.

brug af JSON-formatet

det binære dataformat pickle anvendelser er specifikke for Python. For at forbedre interoperabiliteten mellem forskellige programmer giver JavaScript Object Notation (JSON) et brugervenligt og menneskeligt læsbart skema og blev således meget populært.

følgende eksempel viser, hvordan man skriver en liste over blandede variabeltyper til en outputfil ved hjælp af JSON-modulet. I linje 4 er grundlisten defineret. Efter at have åbnet outputfilen til skrivning i linje 7, gemmer dump() – metoden den grundlæggende liste i filen ved hjælp af JSON-notationen.

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

læsning af indholdet af outputfilen tilbage i hukommelsen er så simpelt som at skrive dataene. Den tilsvarende metode til dump()hedder load() og fungerer som følger:

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

konklusion

de forskellige metoder, der er vist ovenfor, spænder fra enkle skrive – /læsedata op til dumping/indlæsning af data via binære strømme ved hjælp af pickle og JSON. Dette forenkler lagring af en liste vedvarende, og læse den tilbage i hukommelsen.

anerkendelser

forfatteren vil gerne takke for hendes støtte under forberedelsen af artiklen.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *