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