Fájlkezelés, mappák

Bognár Márton, Czirkos Zoltán · 2019.02.27.

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())