Fájlkezelés, mappák
Bognár Márton, Czirkos Zoltán · 2021.05.31.
A fájlkezelésről néhány szó: fájlok létrehozása, írása és olvasása Python nyelven. Ez az írás csak egy rövid segédlet azoknak, akik használni szeretnének fájlokat valamilyen feladatban; az előadáson részletesen is van szó a témáról.
Fájl megnyitása
Pythonban nagyon egyszerű a szövegfájlok kezelése. Fájlok megnyitására az open()
függvényt használhatjuk, amely egy fájl objektumot ad vissza. Első paraméterként a megnyitandó fájl nevét veszi át. Második paraméterként megadhatjuk a megnyitás módját. Ez lehet olvasás: 'r'
, írás: 'w'
, vagy hozzáfűzés: 'a'
. Az alapértelmezett érték az olvasás, azaz 'r'
.
Fájl létrehozása
Fájlba írni a fájl objektum write()
függvényével lehet, ez hasonlóan működik a már ismert print()
függvényhez. Arra azonban figyelni kell, hogy a write()
függvénynek csak egy string paramétere lehet, tehát ha egy sorban több változó értékét akarjuk kiírni, konkatenálást vagy string formázást kell alkalmaznunk.
a = 5
f = open('hello.txt', 'w')
f.write('A változó értéke: {}\n'.format(a))
f.close()
Fontos, hogy a fájl objektumot dolgunk végeztével le is kell zárni, erre szolgál a close()
függvény.
Ezt egyszerűbben is írhatjuk a with
kulcsszó segítségével, amely automatikusan kezeli az erőforrások bezárását a blokk végén:
with open('hello.txt', 'w') as f:
f.write('Ez egy új sor lesz.\n')
Fájl beolvasása
Ha a fájl teljes tartalmát egyszerre szeretnénk kiolvasni, azt megtehetjük a read()
függvénnyel.
with open('hello.txt') as f:
szoveg = f.read()
Sokszor inkább arra van szükségünk, hogy soronként olvassuk be a fájlt. Erre a readline()
függvény használható, vagy egyszerűen a fájl objektumon iterálással (for ... in ...
):
with open('hello.txt') as f:
elso = f.readline()
print('A fájl első sora:', elso)
for line in f:
print('Egy sor:', line)
A sorok olvasásánál ne felejtsük el, hogy a Python a teljes sort beolvassa, a sorvégi újsor karakterrel (\n
) együtt.
Hibák kezelése
Fájlok kezelése közben több hiba is előfordulhat, ezeknek a kezelésére fontos odafigyelni. Például ha írásra nyitunk meg egy addig nem létező fájlt, az létre fog jönni, de olvasás esetén egy FileNotFoundError
kivételt kapunk. Ezt így érdemes kezelni:
try:
with open('hello.txt') as f:
for line in f:
print('Egy sor:', line)
except FileNotFoundError:
print('Nem létezik a fájl!')
Karakterkódolás
Opcionális paraméterként megadható még a fájl kódolása is, erre főleg akkor lehet szükség, ha több, esetleg különböző programnyelven írt alkalmazásból kezelünk egy fájlt – vagy olyan fájllal kell dolgoznunk, amit más forrásból kapunk és nem a mi Python verziónk alapértelmezett kódolását használja.
f = open('hello.txt', encoding='ascii')
Mappák kezelése
Mappák listázására az os
modul scandir()
függvénye használható. Ez egy iterálható tárolót ad vissza, amely DirEntry
típusú objektumokat tartalmaz. Az objektumok lényeges attribútumai és függvényei: name
= név, path
= teljes elérési út, is_dir()
= mappa-e, is_file()
= fájl-e.
A lényeget összefoglalja ez az apró kódrészlet:
import os
dirname = input()
dirlist = os.scandir(dirname)
for e in dirlist:
print(e.name, e.path, e.is_dir(), e.is_file())