Listojen lukeminen ja kirjoittaminen tiedostoon Pythonissa

esittely

Python-ohjelmoijat käyttävät intensiivisesti taulukoita, luetteloita ja sanakirjoja sarjamuotoisina tietorakenteina. Näiden tietorakenteiden jatkuva säilyttäminen vaatii joko tiedoston tai tietokannan toimiakseen oikein.

Tässä artikkelissa tarkastellaan, kuinka luettelo kirjoitetaan tiedostoon ja kuinka se luetaan takaisin muistiin.

jotta kirjoittaa tietoja tiedostoon, ja lukea dataa tiedostostaPython-ohjelmointikieli tarjoaa vakiomenetelmät write() ja read() yhden rivin käsittelemiseen sekä writelines() ja readlines() useiden rivien käsittelyyn. Lisäksi sekä pickle ja json moduulit mahdollistavat myös fiksuja tapoja käsitellä sarjamuotoisia tietojoukkoja.

Käyttäen lukea() ja kirjoittaa() Menetelmät

Käsitelläksesi merkkejä (merkkijonoja) perus read() ja write() menetelmät toimivat erinomaisesti. Sellaisen listan tallentaminen rivi riviltä tiedostoon listfile.txt voidaan tehdä seuraavasti:


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

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

- listitem jatketaan rivinvaihdolla "n", ensin ja tallennetaan sitten tulostiedostoon. Nyt voimme katsoa, ​​kuinka koko luettelo luetaan tiedostosta listfile.txt takaisin muistiin:


places = []


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

Muista, että sinun on poistettava rivinvaihto merkkijonon lopusta. Tässä tapauksessa auttaa meitä, että Python sallii myös merkkijonojen luettelotoiminnot. Tämä poisto tehdään yksinkertaisesti luettelooperaationa itse merkkijonolle, joka säilyttää kaiken paitsi viimeisen elementin. Tämä elementti sisältää merkin "n" joka edustaa rivinvaihtoa UNIX/Linux-järjestelmissä.

Käyttäen kirjoitusrivit () ja Readlines () Menetelmät

Kuten tämän artikkelin alussa mainittiin, Python sisältää myös kaksi menetelmää - writelines() ja readlines() – kirjoittaa ja lukea useita rivejä yhdessä vaiheessa. Kirjoitetaan koko lista levylle:


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

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

Jos haluat lukea koko luettelon levyllä olevasta tiedostosta, tarvitsemme:


places = []


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

Yllä oleva koodi noudattaa perinteisempää lähestymistapaa, joka on lainattu muista ohjelmointikielistä. Kirjoitetaan se lisää Pythonic tapa:


places = []


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

Ensinnäkin tiedoston sisältö luetaan kautta readlines(). Toiseksi, a for silmukan jokaiselta riviltä rivinvaihtomerkki poistetaan käyttämällä rstrip() menetelmä. Kolmanneksi merkkijono lisätään paikkaluetteloon uutena luettelokohteena.

Verrattuna ennen luetteloon koodi on paljon kompaktimpi, mutta voi olla vaikeampi lukea aloitteleville Python-ohjelmoijille.

Joblib-moduulin käyttäminen

Tähän asti selitetyt alkuperäiset menetelmät tallentavat luettelon siten, että ihmiset voivat edelleen lukea sen – kirjaimellisesti peräkkäisenä luettelona tiedostossa. Tämä sopii erinomaisesti yksinkertaisten raporttien luomiseen tai vientitiedostojen, kuten CSV-tiedostojen, tulostamiseen käyttäjien jatkokäyttöön. Mutta jos tavoitteenasi on vain sarjoittaa luettelo tiedostoksi, joka voidaan ladata myöhemmin, sitä ei tarvitse tallentaa ihmisen luettavaan muotoon.

- joblib moduuli tarjoaa helpoimman tavan tyhjentää Python-objekti (voi olla mikä tahansa objekti):

import joblib

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

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

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

joblib on edelleen yksinkertaisin ja siistein tapa sarjoittaa objektit tehokkaassa muodossa ja ladata ne myöhemmin. Voit käyttää mitä tahansa mielivaltaista muotoa, kuten .sav, .datajne. Sillä ei ole väliä – molemmilla joblib ja vaihtoehtoja kuten pickle lukee tiedostot hienosti.

Käyttäen suolakurkku Moduulit

Vaihtoehtona joblib, voimme käyttää pickle! Sen dump() menetelmä tallentaa luettelon tehokkaasti binääritietovirtana. Ensinnäkin tulostiedosto listfile.data avataan binäärikirjoitusta varten ("wb"). Toiseksi luettelo tallennetaan avattuun tiedostoon käyttämällä dump() menetelmä:

import pickle

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

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

Seuraavana vaiheena luemme luettelon tiedostosta seuraavasti. Ensinnäkin tulostiedosto listfile.data avataan binääritiedosto lukemista varten ("rb"). Toiseksi paikkojen luettelo ladataan tiedostosta käyttämällä load() menetelmä:

import pickle

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

Tässä olevat kaksi esimerkkiä osoittavat merkkijonojen käytön. Siitä huolimatta, pickle toimii kaikenlaisten Python-objektien, kuten merkkijonojen, numeroiden, itsemääriteltyjen rakenteiden ja kaikkien muiden Pythonin tarjoamien sisäänrakennettujen tietorakenteiden kanssa.

JSON-muodon käyttäminen

Binääritietomuoto pickle käyttö on Pythonille ominaista. Yhteentoimivuuden parantamiseksi eri ohjelmien välillä JavaScript Object Notation (JSON) tarjoaa helppokäyttöisen ja ihmisen luettavissa olevan skeeman, ja siitä tuli siksi erittäin suosittu tiedostojen sarjoituksessa ja niiden jakamisessa API:iden kautta.

Tutustu käytännönläheiseen, käytännölliseen Gitin oppimisoppaaseemme, jossa on parhaat käytännöt, alan hyväksymät standardit ja mukana tuleva huijauslehti. Lopeta Git-komentojen googlailu ja oikeastaan oppia se!

Seuraava esimerkki osoittaa, kuinka kirjoitetaan luettelo eri muuttujatyypeistä tulostiedostoon käyttämällä json moduuli. Kun tulostetiedosto on avattu kirjoittamista varten, dump() menetelmä tallentaa perusluettelon tiedostoon JSON-merkinnällä:

import json


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


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

Tulostiedoston sisällön lukeminen takaisin muistiin on yhtä helppoa kuin tietojen kirjoittaminen. Vastaava menetelmä dump() on nimeltään load():

import json


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

Yhteenveto

Yllä näyttämämme menetelmät vaihtelevat yksinkertaisesta tietojen kirjoittamisesta/lukemisesta aina tietojen tyhjentämiseen/lataamiseen binäärivirtojen kautta käyttämällä pickle- ja JSON-tiedostoja. Tämä yksinkertaistaa luettelon jatkuvaa tallentamista ja sen lukemista takaisin muistiin.

Aikaleima:

Lisää aiheesta Stackabus