Listák olvasása és írása fájlba Pythonban

Bevezetés

A Python programozók intenzíven használnak tömböket, listákat és szótárakat soros adatszerkezetként. Ezeknek az adatstruktúráknak a folyamatos tárolásához fájlra vagy adatbázisra van szükség a megfelelő működéshez.

Ebben a cikkben megnézzük, hogyan írhatunk listát fájlba, és hogyan olvashatjuk vissza a listát a memóriába.

Nak nek írjon adatokat egy fájlba, és a adatok olvasása fájlból, a Python programozási nyelv kínálja a szabványos módszereket write() és a read() egyetlen sor kezeléséhez, valamint writelines() és a readlines() több sor kezeléséhez. Továbbá mind a pickle és a json A modulok okos módszereket tesznek lehetővé a soros adatkészletek kezelésére is.

az olvas() és a ír() Mód

A karakterek (karakterláncok) kezelésére az alap read() és a write() a módszerek kiválóan működnek. Egy ilyen lista soronkénti mentése a fájlba listfile.txt a következőképpen végezhető el:


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

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

A listitem sortöréssel meghosszabbodik "n", először, majd eltároljuk a kimeneti fájlban. Most megnézhetjük, hogyan olvashatjuk ki a teljes listát a fájlból listfile.txt vissza a memóriába:


places = []


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

Ne feledje, hogy el kell távolítania a sortörést a karakterlánc végéről. Ebben az esetben segítségünkre van, hogy a Python a karakterláncokon is engedélyezi a listaműveleteket. Ezt az eltávolítást egyszerűen listaműveletként hajtják végre magán a karakterláncon, amely mindent megtart, kivéve az utolsó elemet. Ez az elem tartalmazza a karaktert "n" amely a sortörést jelenti UNIX/Linux rendszereken.

az írási sorok () és a readlines() Mód

Ahogy a cikk elején említettük, a Python két módszert is tartalmaz – writelines() és a readlines() – egy lépésben több sor írása, illetve elolvasása. Írjuk a teljes listát egy fájlba a lemezen:


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

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

A teljes lista olvasásához egy lemezen lévő fájlból a következőkre van szükségünk:


places = []


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

A fenti kód egy hagyományosabb, más programozási nyelvekből kölcsönzött megközelítést követ. Írjuk meg bővebben Pythonic út:


places = []


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

Először is a fájl tartalma beolvasásra kerül readlines(). Másodszor, a for ciklus minden sorból a sortörés karakter eltávolításra kerül a rstrip() módszer. Harmadszor, a karakterlánc új listaelemként hozzáadódik a helyek listájához.

Az előtti listához képest a kód sokkal kompaktabb, de a kezdő Python programozók számára nehezebb lehet olvasni.

A Joblib modul használata

Az eddig ismertetett kezdeti módszerek úgy tárolják a listát, hogy az emberek még el tudják olvasni – szó szerint egy szekvenciális lista egy fájlban. Ez kiválóan alkalmas egyszerű jelentések készítésére vagy export fájlok (például CSV-fájlok) kiadására a felhasználók számára további használatra. Ha azonban az a cél, hogy egy listát egy fájlba sorozzon, amely később betölthető, akkor nincs szükség arra, hogy azt ember által olvasható formátumban tárolja.

A joblib modul biztosítja a legegyszerűbb módot a Python objektumok kiíratására (valójában bármilyen objektum lehet):

import joblib

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

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

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

joblib továbbra is a legegyszerűbb és legtisztább módja az objektumok hatékony formátumban történő sorozatosításának és későbbi betöltésének. Bármilyen tetszőleges formátumot használhat, mint pl .sav, .data, stb. Nem igazán számít – mindkettő joblib és alternatívák, mint pl pickle jól beolvassa a fájlokat.

az pác Modulok

A joblib, tudjuk használni pickle! Az dump() módszer hatékonyan tárolja a listát bináris adatfolyamként. Először is a kimeneti fájl listfile.data meg van nyitva bináris írásra ("wb"). Másodszor, a lista a megnyitott fájlban tárolódik a dump() eljárás:

import pickle

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

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

Következő lépésként a listát a következőképpen olvassuk ki a fájlból. Először is a kimeneti fájl listfile.data binárisan meg van nyitva olvasásra ("rb"). Másodszor, a helyek listája betöltődik a fájlból a load() eljárás:

import pickle

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

A két példa a karakterláncok használatát mutatja be. Habár, pickle mindenféle Python objektummal működik, például karakterláncokkal, számokkal, öndefiniált struktúrákkal és minden más beépített adatstruktúrával, amelyet a Python biztosít.

A JSON formátum használata

A bináris adatformátum pickle felhasználása a Pythonra jellemző. A különböző programok közötti együttműködés javítása érdekében a JavaScript Object Notation (JSON) egy könnyen használható és ember által olvasható sémát biztosít, így nagyon népszerűvé vált a fájlok sorosítása és API-kon keresztüli megosztása terén.

Tekintse meg gyakorlatias, gyakorlati útmutatónkat a Git tanulásához, amely tartalmazza a bevált gyakorlatokat, az iparág által elfogadott szabványokat és a mellékelt csalólapot. Hagyd abba a guglizást a Git parancsokkal, és valójában tanulni meg!

A következő példa bemutatja, hogyan írhat vegyes változótípusok listáját egy kimeneti fájlba a json modult. Miután megnyitotta a kimeneti fájlt írásra, a dump() metódus az alaplistát a fájlban tárolja a JSON jelöléssel:

import json


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


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

A kimeneti fájl tartalmának visszaolvasása a memóriába olyan egyszerű, mint az adatok írása. A megfelelő módszer dump() a neve load():

import json


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

Következtetés

A fent bemutatott különböző módszerek az adatok egyszerű írásától/olvasásától kezdve egészen az adatok kiírásáig/betöltéséig, bináris adatfolyamokon keresztül, pickle és JSON használatával. Ez leegyszerűsíti a lista folyamatos tárolását és visszaolvasását a memóriába.

Időbélyeg:

Még több Stackabus