A fájlkezelés a webalkalmazások egyik fontos része.
A Python több függvényt is biztosít fájlok létrehozásához, olvasásához, módosításához és törléséhez.
## Fájlkezelés
A Python-ban a fájlokkal való munka kulcsfüggvénye az ``open()`` függvény.
Az ``open()`` két paramétert vár: a megnyitni kívánt **fájl nevét** és a megnyitás **módját**.
A fájl megnyitásának négy módja létezik:
- **“r” – Read (olvasás)** – Alapértelmezett érték. Olvasásra nyitja meg a fájlt; hibát dob, ha a fájl nem létezik.
- **“a” – Append (hozzáfűzés)** – Hozzáfűzésre nyitja meg; létrehozza a fájlt, ha nem létezik.
- **“w” – Write (írás)** – Írásra nyitja meg; létrehozza a fájlt, ha nem létezik.
- **“x” – Create (létrehozás)** – Létrehozza a megadott fájlt; hibát dob, ha már létezik.
Ezen felül megadhatjuk, hogy szöveges vagy bináris módban szeretnénk kezelni a fájlt:
- **“t” – Text (szöveg)** – Alapértelmezett mód; szöveges fájlok.
- **“b” – Binary (bináris)** – Bináris mód (pl. képekhez).
## Szintaxis
Egy fájl olvasásra történő megnyitásához elegendő a fájl nevét megadni:
>[!example] Fájl megnyitása
>```python
>f = open("demofile.txt")
>```
A fenti kód megegyezik ezzel:
>[!example] Fájl megnyitása
>```python
>f = open("demofile.txt", "rt")
>```
Mivel az **“r”** (read) és a **“t”** (text) az alapértelmezett értékek, nem szükséges külön megadni őket.
>[!warning] Fájl megnyitása
> Győződj meg róla, hogy a fájl létezik, különben hibát fogsz kapni.
## Fájlok olvasása
Tegyük fel, hogy van egy alábbi tartalmú fájlunk, ugyanabban a mappában, ahol a Python-program fut:
>[!example] demo.txt
>```txt
>Szi! Üdvözöllek a demofile.txt-ben!
>Ez a fájl tesztelési célokat szolgál.
>Sok sikert!
>```
A fájl megnyitásához használd a beépített ``open()`` függvényt.
Az ``open() ``függvény egy fájlobjektumot ad vissza, amely rendelkezik ``read()`` metódussal, amellyel ki lehet olvasni a fájl tartalmát.
>[!example] Példa.
>```python
>f = open("demofile.txt")
>print(f.read())
>```
Ha a fájl nem ugyanabban a mappában van, akkor meg kell adnod az elérési útját:
>[!example] Fájl megnyitása másik helyről
>```python
>f = open("D:\\myfiles\\welcome.txt")
>print(f.read())
>```
### A with utasítás használata
A fájlok megnyitásához használhatod a ``with`` utasítást is:
>[!example] ``with`` kulcsszó használata
>```python
>with open("demofile.txt") as f:
> print(f.read())
>```
Így **nem kell külön bezárni** a fájlt, a ``with`` szerkezet automatikusan elvégzi ezt.
### Fájlok bezárása
Jó gyakorlat, hogy a fájl megnyitása után mindig bezárjuk azt.
Ha nem használjuk a ``with`` szerkezetet, akkor nekünk kell meghívnunk a ``close()`` metódust:
>[!example] fájl bezárása használat után
>```python
>f = open("demofile.txt")
>print(f.readline())
>f.close()
>```
>[!note] Megjegyzés
>Mindig zárjuk be a fájlokat! Egyes esetekben az adatok csak akkor kerülnek ténylegesen mentésre, amikor a fájlt lezárjuk.
### A fájl egy részének beolvasása
Alapértelmezés szerint a ``read()`` metódus a teljes tartalmat visszaadja, de megadhatjuk, hogy hány karaktert szeretnék kiolvasni.
>[!example] Az első 5 karakter visszaadása
>```python
>with open("demofile.txt") as f:
> print(f.read(5))
>```
### Sorok beolvasása
Egyetlen sort a ``readline()`` metódussal kérhetünk le:
>[!example] Egy sor beolvasása
>```python
>with open("demofile.txt") as f:
> print(f.readline())
>```
Ha kétszer hívjuk meg a ``readline()`` metódust, akkor az első két sort olvassuk be:
>[!example] Két sor beolvasása
>```python
>with open("demofile.txt") as f:
> print(f.readline())
> print(f.readline())
>```
A fájl sorain végig is iterálhatunk egy ciklussal, így a teljes fájlt soronként tudjuk feldolgozni:
>[!example] Végigiterálás a fájl sorain
>```python
>with open("demofile.txt") as f:
> for x in f:
> print(x)
>```
## Írás meglévő fájlba
Ha egy meglévő fájlba szeretnél írni, az ``open()`` függvényhez plusz egy paramétert kell megadni:
- **“a” – Append (hozzáfűzés):** a fájl végéhez fűzi hozzá az új tartalmat
- **“w” – Write (írás):** felülírja a meglévő tartalmat
>[!example] Tartalom hozzáfűzése a fájl végéhez
>```python
>with open("demofile.txt", "a") as f:
> f.write("Most már még több tartalom!")
>
># A fájl megnyitása és kiolvasása a hozzáfűzés után:
>with open("demofile.txt") as f:
> print(f.read())
>```
## Meglévő tartalom felülírása
Ha teljesen új tartalommal szeretnénk felülírni a fájl tartalmát, akkor a **“w”** paramétert használjuk:
>[!example] Fájl felülírása
>```python
>with open("demofile.txt", "w") as f:
> f.write("Hopsz! Töröltem a fájl tartalmát!")
>
># A fájl megnyitása és kiolvasása felülírás után:
>with open("demofile.txt") as f:
> print(f.read())
>```
>[!note] Megjegyzés:
> A **“w”** mód _teljesen felülírja_ a fájlt.
## Új fájl létrehozása
Új fájl létrehozásához az ``open()`` függvényt kell használni, az alábbi módok valamelyikével:
- **“x” – Create (létrehozás):** létrehozza a fájlt; hibát dob, ha a fájl már létezik
- **“a” – Append (hozzáfűzés):** létrehozza a fájlt, ha nem létezik
- **“w” – Write (írás):** létrehozza a fájlt, ha nem létezik
>[!example] Új fájl létrehozása ``myfile.txt`` néven
>```python
>f = open("myfile.txt", "x")
>```
**Eredmény:** egy új, üres fájl jön létre.
>[!note] Megjegyzés
> Ha a fájl már létezik, a **“x”** mód hibát generál.
## Fájl törlése
Egy fájl törléséhez be kell importálni az ``os`` modult, majd meghívni az ``os.remove()`` függvényt.
>[!example] ``demofile.txt`` törlése
>```python
>import os
>os.remove("demofile.txt")
>```
## Fájl létezésének ellenőrzése
Hogy elkerüljük a hibát, érdemes először ellenőrizni, hogy a fájl létezik-e, mielőtt törölnénk.
>[!example] Fájl létezésének ellenőrzése, majd törlése
>```python
>import os
>
>if os.path.exists("demofile.txt"):
> os.remove("demofile.txt")
>else:
> print("A fájl nem létezik")
>```
## Mappa törlése
Egy teljes mappa törléséhez az ``os.rmdir()`` metódust használhatjuk.
>[!example] ``myfolder`` nevű mappa törlése
>```python
>import os
>os.rmdir("myfolder")
>```
>[!example] Megjegyzés
> Csak **üres mappákat** lehet ezzel a módszerrel törölni.
## Feladatok
>[!task] **1. Egyszerű fájlolvasás**
>Hozz létre egy ``hello.txt`` nevű fájlt, amely tartalmazza ezt a szöveget: `"Hello Python!"`
Írj egy programot, amely megnyitja a fájlt, beolvassa a teljes tartalmát és kiírja a képernyőre.
>[!task] **2. Új szöveg hozzáfűzése**
Írj egy Python-programot, amely megnyitja a ``hello.txt`` fájlt **hozzáfűzésre**, hozzáír a következő új sort: ```Új sor hozzáadva.```, majd olvasásra is megnyitja a fájlt, és kiírja a teljes tartalmát.
>[!task] **3. Csak az első N karakter beolvasása**
>Kérd be a felhasználótól, hogy hány karaktert szeretne látni a ``hello.txt``fájlból. A program nyissa meg a fájlt, a megadott számú karaktert olvassa be, majd írja ki őket a képernyőre. Ha a szám nagyobb, mint a fájl hossza, a teljes szöveg jelenjen meg.
>[!task] **4. Soronkénti feldolgozás**
>Készíts egy programot, amely megnyitja a `numbers.txt` fájlt, ahol minden sorban **egy szám** van. A program olvassa be soronként a számokat, adja össze őket, a végén írja ki az összegüket.
>>[!example] ``numbers.txt``
>>5
>>12
>>3
>>9
>[!task] **5. Fájl törlése ellenőrzéssel**
>Készíts egy programot, amely bekér egy fájlnevet a felhasználótól, ellenőrzi, hogy a fájl létezik-e, ha létezik, rákérdez: ``„Biztosan törölni szeretnéd? (igen/nem)”``, ha a felhasználó ``„igen”``-t ír, törölje a fájlt, ha nem létezik, jelenítsen meg hibaüzenetet.
## Források
- https://www.w3schools.com/python/python_file_handling.asp (utolsó hozzáférés dátuma: 2025. 11. 27.)
- https://www.w3schools.com/python/python_file_open.asp (utolsó hozzáférés dátuma: 2025. 11. 27.)
- https://www.w3schools.com/python/python_file_write.asp (utolsó hozzáférés dátuma: 2025. 11. 27.)
- https://www.w3schools.com/python/python_file_remove.asp (utolsó hozzáférés dátuma: 2025. 11. 27.)