Articles

Läsa och skriva listor till en fil i Python

som serialiserade datastrukturer använder Python-programmerare intensivt arrayer, listor och ordböcker. Lagring av dessa datastrukturer kräver ständigt antingen en fil eller en databas att arbeta med. I den här artikeln beskrivs hur du skriver en lista till fil och hur du läser den listan tillbaka till minnet.

För att skriva data i en fil och läsa data från en fil erbjuder programmeringsspråket Python standardmetodernawrite() ochread() för att hantera en enda rad, liksomwritelines() ochreadlines() för att hantera flera rader. Dessutom tillåter bådepickle ochjson – modulen smarta sätt att hantera serialiserade datamängder också.

använda Läs-och skrivmetoderna

för att hantera tecken (strängar) fungerar de grundläggande metoderna utmärkt. Spara en sådan lista rad för rad i filen listfile.txt kan göras enligt följande:

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

i rad 6 förlängs listitem med en linebreak ”\n”, för det första och lagras i utdatafilen, för det andra. För att läsa hela listan från fillistanfilen.txt tillbaka till minnet denna Python-kod visar hur det fungerar:

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

Tänk på att du måste ta bort linebreak från slutet av strängen. I det här fallet hjälper det oss att Python tillåter listoperationer på strängar också. I rad 8 i koden ovan görs denna borttagning helt enkelt som en listoperation på själva strängen, som håller allt utom det sista elementet. Detta element innehåller tecknet” \n ” som representerar linebreak på UNIX/Linux-system.

använda Writelines och readlines metoder

som nämnts i början av denna artikel Python innehåller också de två metodernawritelines() ochreadlines() att skriva och läsa flera rader i ett steg, respektive. För att skriva hela listan till en fil på disken är Python-koden följande:

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

För att läsa hela listan från en fil på disken är Python-koden följande:

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

listan ovan följer ett mer traditionellt tillvägagångssätt lånat från andra programmeringsspråk. För att skriva det på ett mer Pythoniskt sätt, ta en titt på koden nedan:

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

Efter att ha öppnat filen listfile.txt I rad 5 sker återupprättandet av listan helt i rad 6. För det första läses filinnehållet via readlines(). För det andra, i enfor – slinga från varje rad tas linebreak-tecknet bort medrstrip() – metoden. För det tredje läggs strängen till i listan över platser som ett nytt listobjekt. I jämförelse med noteringen innan koden är mycket mer kompakt, men kan vara svårare att läsa för nybörjare Python programmerare.

använda pickle-modulen

de olika metoderna som hittills förklarats lagrar listan på ett sätt som människor fortfarande kan läsa den. Om detta inte behövs pickle modulen kan bli ganska praktiskt för dig. Dessdump() metod lagrar listan effektivt som en binär dataström. För det första öppnas i rad 7 (i koden nedan) utdatafilen listfile.data för binär skrivning (”wb”). För det andra lagras listan i rad 9
i den öppnade filen med 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ästa steg läser vi listan från filen enligt följande. För det första öppnas utdatafilen listfile.data binärt för läsning (”rb”) i rad 4. För det andra laddas listan över platser från filen med load() – metoden.

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

de två exemplen här visar användningen av strängar. Även om pickle fungerar med alla typer av Python-objekt som strängar, siffror, självdefinierade strukturer och alla andra inbyggda datastrukturer som Python tillhandahåller.

använda JSON-formatet

det binära dataformatetpickle använder är specifikt för Python. För att förbättra interoperabiliteten mellan olika program ger JavaScript Object Notation (JSON) ett lättanvänt och mänskligt läsbart schema och blev därmed mycket populärt.

följande exempel visar hur man skriver en lista med blandade variabla typer till en utdatafil med JSON-modulen. I rad 4 definieras grundlistan. Efter att ha öppnat utdatafilen för skrivning i rad 7 lagrar metoden dump() grundlistan i filen med JSON-notationen.

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

att läsa innehållet i utdatafilen tillbaka till minnet är lika enkelt som att skriva data. Motsvarande metod till dump() heter load() och fungerar enligt följande:

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

slutsats

de olika metoderna som visas ovan sträcker sig från enkla skriv – /läsningsdata upp till dumpning/laddning av data via binära strömmar med pickle och JSON. Detta förenklar lagring av en lista ihållande och läser den tillbaka i minnet.

bekräftelser

författaren vill tacka Zoleka Hatitongwe för hennes stöd när hon förberedde artikeln.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *