Fájlok olvasása és feldolgozása
Amikor nagyobb mennyiségű adatokkal dolgozunk, ezeket általában nem a konzolról olvassuk be, hanem például szövegfájlokból. Erre természetesen a Python is lehetőséget kínál az open függvény használatával. Az open használható arra, hogy egy fájlt megnyissunk akár olvasásra, akár a későbbiek során majd írásra. Két paramétere fontos számunkra: az első a szövegfájl neve, a második pedig a megnyitás módja, ami jelenleg r, mivel olvasásra szeretnénk használni a fájlt. Íme egy példa:
fajl = open("szoveg.txt", "r")
A megnyitott fájl eléréséhez utána ezt a változót fogjuk tudni használni.
Fájl soronkénti végigolvasása for ciklussal
fajl = open("szoveg.txt", "r")
adatok = []
for sor in fajl:
adatok.append(sor.strip())
Ez a kódrészlet beolvassa a fájl sorait, és eltárolja őket az adatok nevű listában. A listák működéséről a Listák cikkünkben tudhatsz meg többet. Amennyiben az adataink további feldolgozást igényelnek, pl. táblázatos jellegűek, és a sorokat tovább kell darabolni (lásd: szövegek darabolása Split-tel), akkor ezt is könnyedén megtehetjük akár ezen a cikluson belül is.
Soronkénti beolvasás for nélkül
A fájlból sorok beolvasására for ciklus nélkül is van lehetőség. Erre a legegyszerűbb megoldás a .readline() utasítás használata, amely lehetővé teszi egy-egy sor beolvasását a fájlból. Az utasítás követi, hogy hol tartunk a fájl feldolgozásával, és mindig a következő sort adja vissza – a fájl elfogyása esetén pedig egy üres szöveggel tér vissza. Íme egy példa a readline használatára:
fajl = open("szoveg.txt", "r")
print("A fájl első sora:", fajl.readline().strip())
print("A fájl második sora:", fajl.readline().strip())
Fájl lezárása és a with kulcsszó
A fájlokat azok beolvasása után érdemes lezárni – ezzel jelezzük a számítógép felé, hogy befejeztük a fájllal való munkát. Ennek fájlok írásakor nagyobb a jelentősége, de alapvetően olvasáskor is minden esetben le kell zárni a fájlt miután végeztünk vele, még akkor is, ha itt kevésbé vezet látványos hibákhoz ha esetleg megfeledkezünk róla.
A fájlt lezárhatjuk "kézzel" is a .close() utasítással, azonban egyszerűbb és átláthatóbb, ha ehelyett a Python with szerkezetét használjuk – ez nem csak a beolvasásért felelős kód elkülönítésében segít, de automatikusan le is zárja a fájlt az utasításblokk végén, ezzel biztosítva, hogy ne feledkezzünk meg erről. Előnye továbbá, hogy a fájl lezárása így akkor is garantáltan megtörténik, ha egyébként a blokkon belüli kódunk hibára fut.
Nézzünk egy példát fájlbeolvasásra a with kontextuskezelő szerkezet használatával:
with open("szoveg.txt", "r") as fajl:
adatok = []
for sor in fajl:
adatok.append(sor.strip())
Ez a példa egy jó minta egy általános fájlbeolvasás megvalósítására.
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!