Példa: Szövegfájlok feldolgozása
Most, hogy megismerkedtünk a szövegfájlok beolvasásával, és a szövegfeldolgozás alapjaival is megismerkedtünk már, egy példán keresztül áttekintjük egy egyszerű szövegfájl adatainak feldolgozását. A példában használt fájl az 1973-ban megszűnt Baktalórántháza - Kisvárda vasútvonal állomásait és megállóhelyeit tartalmazza, azok kiindulóponttól való távolságáva, valamint típusával az alábbi formátumban:
0;Kisvárda;állomás 3;Kisvárdai szőlők;megállóhely 6;Anarcs;megállóhely 9;Gyulaháza;megállóhely 15;Nyírkarász;állomás 19;Petneháza;megállóhely 22;Nyírjákó;megállóhely 24;Lórántháza;megállóhely 27;Baktalórántháza;állomás
Ismerkedjünk meg az adatokkal
Áttekintve a fájlt, láthatjuk, hogy minden sor egy állomásról tartalmaz információt, és azt is láthatjuk, hogy minden sorban pontosvesszőkarakter választja el a 3 adatot - ebből láthatjuk, hogy a split utasítást tudjuk majd használni az információk szétvágására. Ezen felül érdemes lehet vetni még egy pillantást az információk adattípusaira:
- Távolság: az megállóhely távolsága a vonal kiindulópontjától az adatok közt egész számként szerepel, ennek megfelelően int adattípust lenne érdemes használni - hiszen ha számként tároljuk, könnyebben tudjuk majd összehasonlítani, vagy műveleteket végezni vele
- Név: az megállóhely neve szöveg, így ezt szövegként tároljuk
- Jelleg: a megállóhely jellege csak két érték lehet: állomás, vagy megállóhely. Ez alapján ezt tárolhatnánk akár egy logikai érték formájában is: ha az adott megállási pont egy állomás, akkor True, ha csak megállóhely, akkor pedig False értékként.
Készítsük el!
A tervek alapján készítsük el a fájl beolvasását.
# Ebbe a listába fogjuk letárolni az állomásokat
allomasok = []
# Megnyitjuk a fájlt. A with szerkezetnek hála a fájl a beolvasás után automatikusan bezárásra kerül.
with open("vasutvonal.txt", "r") as fajl:
# Egy for ciklussal végighaladnk a fájl minden során
for sor in fajl:
# A beolvasott sort szétvágjuk a pontosvessző karakternél
adatok = sor.strip().split(";")
# Ezt követően létrehozunk egy szótárat az adatok tárolására
szotar = {
"tavolsag": int(adatok[0]), # A távolságot int-re konvertáljuk
"nev": adatok[1], # Az állomás nevét elég letárolnunk szövegként
# A megállási pont jellegét pedig legegyszerűbben a ternary operátorral alakíthatjuk logikai értékké
"allomas": True if adatok[2]=="állomás" else False
}
# Az összeállított szótárat pedig elhelyezzük a listában.
allomasok.append(szotar)
# Teszt jelleggel kiíratjuk a beolvasott adatokat a konzolra.
print(allomasok)
Próbáld ki magad is! Nézd át a cikkünkhöz tartozó mintakódot - szerkeszd és futtasd közvetlenül a böngésződben, az info9
LineFlame fejlesztőeszközével!