Loendite lugemine ja kirjutamine faili Pythonis

Sissejuhatus

Pythoni programmeerijad kasutavad järjestikuste andmestruktuuridena intensiivselt massiive, loendeid ja sõnastikke. Nende andmestruktuuride püsivaks salvestamiseks on nõuetekohaseks tööks vaja kas faili või andmebaasi.

Selles artiklis vaatleme, kuidas loendit faili kirjutada ja seda loendit mällu tagasi lugeda.

Et kirjutada andmed failiNing lugeda failist andmeid, pakub Pythoni programmeerimiskeel standardseid meetodeid write() ja read() ühe reaga tegelemiseks, samuti writelines() ja readlines() mitme liiniga tegelemiseks. Lisaks on mõlemad pickle ja json moodulid võimaldavad nutikaid viise käsitleda ka jadaandmekogumeid.

kasutades loe () ja kirjuta () Meetodid

Tegelaste (stringide) käsitlemiseks põhiline read() ja write() meetodid töötavad suurepäraselt. Sellise loendi salvestamine rida-realt faili listfile.txt saab teha järgmiselt:


places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

with open('listfile.txt', 'w') as filehandle:
    for listitem in places:
        filehandle.write(f'{listitem}n')

. listitem pikendatakse reavahetusega "n", esiteks ja seejärel salvestatakse väljundfaili. Nüüd saame vaadata, kuidas failist kogu loendit lugeda listfile.txt tagasi mällu:


places = []


with open('listfile.txt', 'r') as filehandle:
    for line in filehandle:
        
        curr_place = line[:-1]
        
        places.append(curr_place)

Pidage meeles, et peate eemaldama stringi lõpust reavahetuse. Sel juhul aitab meid see, et Python lubab ka stringide loenditoiminguid. See eemaldamine toimub lihtsalt stringi enda loenditoiminguna, mis jätab alles kõik peale viimase elemendi. See element sisaldab tähemärki "n" mis tähistab UNIXi/Linuxi süsteemide reavahetust.

kasutades writelines () ja readlines () Meetodid

Nagu selle artikli alguses mainitud, sisaldab Python ka kahte meetodit - writelines() ja readlines() – vastavalt mitme rea kirjutamine ja lugemine ühes etapis. Kirjutame kogu loendi kettale faili:


places_list = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

with open('listfile.txt', 'w') as filehandle:
    filehandle.writelines(f"{place for place in places_list}n")

Kogu loendi lugemiseks kettal olevast failist peame:


places = []


with open('listfile.txt', 'r') as filehandle:
    filecontents = filehandle.readlines()
    for line in filecontents:
        
        curr_place = line[:-1]
        
        places.append(curr_place)

Ülaltoodud kood järgib traditsioonilisemat lähenemist, mis on laenatud teistest programmeerimiskeeltest. Kirjutame sellest pikemalt pütooniline tee:


places = []


with open('listfile.txt', 'r') as filehandle:
    places = [current_place.rstrip() for current_place in filehandle.readlines()]

Esiteks loetakse faili sisu läbi readlines(). Teiseks, aastal a for silmus igalt realt eemaldatakse reavahetuse märk, kasutades rstrip() meetod. Kolmandaks lisatakse string kohtade loendisse uue loendiüksusena.

Võrreldes eelneva loendiga on kood palju kompaktsem, kuid algajatele Pythoni programmeerijatele võib seda olla raskem lugeda.

Joblib mooduli kasutamine

Seni selgitatud esialgsed meetodid salvestavad loendi nii, et inimesed saaksid seda lugeda – sõna otseses mõttes järjestikuse loendina failis. See sobib suurepäraselt lihtsate aruannete loomiseks või ekspordifailide (nt CSV-failide) väljastamiseks kasutajatele edasiseks kasutamiseks. Kuid kui teie eesmärk on lihtsalt järjestada loend failiks, mida saab hiljem laadida, pole vaja seda salvestada inimesele loetavas vormingus.

. joblib moodul pakub lihtsaimat viisi Pythoni objekti tühjendamiseks (võib olla mis tahes objekt):

import joblib

places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

joblib.dump(places, 'places.sav')

places = joblib.load('places.sav')
print(places) 

joblib on endiselt lihtsaim ja puhtaim viis objektide tõhusas vormingus järjestamiseks ja nende hilisemaks laadimiseks. Võite kasutada mis tahes suvalist vormingut, näiteks .sav, .datajne. See pole tegelikult oluline – mõlemad joblib ja alternatiive nagu pickle loeb faile hästi.

kasutades hapukurk moodulid

Alternatiivina joblib, saame kasutada pickle! Tema dump() meetod salvestab loendi tõhusalt binaarse andmevoona. Esiteks väljundfail listfile.data on avatud binaarseks kirjutamiseks ("wb"). Teiseks salvestatakse loend avatud faili kasutades dump() meetod:

import pickle

places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

with open('listfile.data', 'wb') as filehandle:
    
    pickle.dump(places, filehandle)

Järgmise sammuna loeme failist nimekirja järgmiselt. Esiteks väljundfail listfile.data on lugemiseks avatud binaarfail ("rb"). Teiseks laaditakse kohtade loend failist kasutades load() meetod:

import pickle

with open('listfile.data', 'rb') as filehandle:
    
    placesList = pickle.load(filehandle)

Need kaks näidet näitavad stringide kasutamist. kuigi, pickle töötab igasuguste Pythoni objektidega, nagu stringid, numbrid, isemääratletud struktuurid ja kõik muud Pythoni pakutavad sisseehitatud andmestruktuurid.

JSON-vormingu kasutamine

Binaarandmete vorming pickle kasutusala on Pythonile omane. Et parandada erinevate programmide koostalitlusvõimet, on JavaScript Object Notation (JSON) pakub hõlpsasti kasutatavat ja inimloetavat skeemi ning sai seetõttu väga populaarseks failide jadamiseks ja API-de kaudu jagamiseks.

Tutvuge meie praktilise ja praktilise Giti õppimise juhendiga, mis sisaldab parimaid tavasid, tööstusharus aktsepteeritud standardeid ja kaasas olevat petulehte. Lõpetage Giti käskude guugeldamine ja tegelikult õppima seda!

Järgmine näide demonstreerib, kuidas kirjutada väljundfaili segamuutujate tüüpide loend, kasutades Json moodul. Pärast väljundfaili kirjutamiseks avamist, dump() meetod salvestab faili põhiloendi, kasutades JSON-i märge:

import json


basic_list = [1, "Cape Town", 4.6]


with open('listfile.txt', 'w') as filehandle:
    json.dump(basic_list, filehandle)

Väljundfaili sisu mällu tagasi lugemine on sama lihtne kui andmete kirjutamine. Vastav meetod, et dump() on nimetatud load():

import json


with open('listfile.txt', 'r') as filehandle:
    basic_list = json.load(filehandle)

Järeldus

Eespool näidatud erinevad meetodid ulatuvad andmete lihtsast kirjutamisest/lugemisest kuni andmete dumpingu/laadimiseni binaarvoogude kaudu, kasutades pickle'i ja JSON-i. See lihtsustab loendi püsivat salvestamist ja selle mällu tagasi lugemist.

Ajatempel:

Veel alates Stackabus