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
, .data
jne. 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.