Fájlkezelés során valamely háttértárról tudunk beolvasni adatokat a számítógép memóriájába, vagy adatokat kiírni onnan fájlba. Egy fájlnak van neve, kiterjesztése, elérési útja. A benne tárolt adatokat hosszú távon akarjuk megőrizni.
Alapvetően 3 lépés az egész: fájl megnyitása, tatalom beolvasása a memóriába, (módosításuk) fájl lezárása.
Fájl megnyitása: open() függvény
Az open függvény paramétereként a fájl elérési útját kell megadni. (relatív elérési út!)
Egyéb paraméterek:
"r"
– Read – Alapértelmezetten olvasásra nyitja meg a fájlt. Ha a fájl nem létezik hibát ad vissza: FileNotFoundError. Tehát célszerű ellenőrizni, hogy létezik-e az adott fájl! os.path.exist(fájlnév)
"a"
– Append – Fájl megnyitása hozzáfűzésre (tartalom hozzáadása). Ha a fájl még nem létezik, akkor létrehozza.
"w"
– Write – Fájl megnyitása íráshoz, ha nem létezik a fájl akkor ez is létrehozza.
"x"
– Create – Létrehozza a megadott fájlt, hibát dob, ha a fájl már létezik
„encoding” Karakterkódolás. Alap esetben a Windows az ANSI szabványt használja, ezért célszerű átalakítani a szöveget utf-8-ra, ha nem akarunk furcsa ékezetes karaktereket kapni.
with parancs: ha a with paranccsal együtt nyitjuk meg a fájlt, akkor nem kell külön lezárni!
Alapesetben a fájlokat szövegként kezeli a Python („t” paraméter, elhagyható), de a „b” paraméterrel van lehetőség bináris módra is. pl. képek, hangok, videók stb. esetében.
Fájl bezárása: close() A fájlt megnyitás, olvasás (módosítás) után le is kell zárni!
#Fájl tartalmának kiírása képernyőre
fajl = open("pelda.txt", "r")
print(fajl.read())
fajl.close()
#Fájl tartalmának mentése változóba, stringként
fajl = open("pelda.txt", "r")
valtozo = fajl.read()
fajl.close()
#Fájl megnyitása, hibakezelés nélkül
forras = open('pelda.txt')
for sor in forras:
print(sor)
forras.close()
#Fájl megnyitása, hibakezelés nélkül, with paranccsal
forras = with open('pelda.txt')
for sor in forras:
print(sor)
#Fájl megnyitása hibakezeléssel
import os
fajlneve = 'pelda.txt'
if os.path.exists(fajlneve):
forras = open(fajlneve,encoding='utf-8')
for sor in forras:
print(sor)
#print(sor.strip()) felesleges soremelések eltávolítása
forras.close()
else:
print('A',fajlneve,'fájl nem található!')
#forras.seek() Ha újra a fájl elejére akarunk lépni, és még nem zártuk be a fájlt!
Fájl tartalmának kiíratása, kicsit részletesebben:
Ha az egészet szimplán ki szeretnénk íratni akkor használjuk a read() metódust. tulajdonképpen a beolvasott tartalmat átirányítjuk a képernyőre.
fajl = open("\mappa\pelda.txt", "r")
print(fajl.read())
Van lehetőség csak megadott számú karakter kiírására is. pl: Első 10 karakter kiíratása:
fajl = open("pelda.txt", "r")
print(fajl.read(10))
Van lehetőség a fájl első sorának beolvasására is: readline()
fajl = open("pelda.txt", "r")
print(fajl.readline())
Van lehetőség a fájl tartalmát listába is beolvasni a readlines() függvénnyel. Nyilván itt feltételezzük, hogy több sornyi szövegünk van a txt-ben. Ebben a példában minden második sor szövegét iratom ki:
fajl = open('tobbsoros.txt',encoding='utf-8')
sorok = fajl.readlines()
fajl.close()
for i in range(1,len(sorok),2):
print(sor[i].strip())
Fájl beolvasása soronként for ciklussal:
fajl = open("pelda.txt", "r")
for x in fajl:
print(x)
Írás fájlba
Itt két lehetőség merül fel: már létező fájl szeretnénk módosítani, vagy új fájlt létrehozni és azzal dolgozni.
Új fájl létrehozása
Ahogy korábban már említettem, az open() metódus különböző paramétereivel tudunk létrehozni új fájlt.
"x"
– Új fájlt hoz létre. Ha az adott néven már létezik fájl, hibaüzenetet ad.
"a"
– append Hozzáfűzés, ha létezik a fájl. Ha még nem akkor létrehozza.
"w"
– write Írás fájlba. Ha még nem létezik a megadott fájl, akkor létrehozza.
fajl = open("pelda.txt", "x")
fajl = open("pelda.txt", "a")
fajl = open("pelda.txt", "w")
Létező fájl módosítása
Az open() függvénnyel tudjuk megnyitni a fájlt, a következő paraméterekkel:"a"
– append – Hozzáfűzés, a szöveg végéhez, tehát az addigi tartalom megmarad."w"
– write – Felülírja a fájl meglévő tartalmát!
fajl = open("peldafajl.txt", "a")
fajl .write("Egy új mondat, hurrá!")
fajl .close()
#fájl megnyitása hozzáírás után, tartalma
fajl = open("peldafajl.txt", "r")
print(fajl .read())
Fájl és könyvtár törlése
Fájl törléséhez importálni kell az ‘os’ modult. Törölni az os.remove() függvénnyel lehet. Törlés előtt is célszerű leellenőrizni, hogy létezik-e a fájl, ne dobjon hibát a program.
import os
if os.path.exists("peldafajl.txt"):
os.remove("peldafajl.txt")
else:
print("A megadott fájl nem létezik!")
Könyvtár törléséhez szintén az os modul szükséges, azon belül az os.rmdir() függvény.
import os
os.rmdir("mappaneve")
Gyakorlás – fájlkezelés
Írjuk ki a hétköznapokat egy txt fájlba, majd fűzzük hozzájuk a hétvégi napokat is! Írassuk ki a képernyőre a fájl tartalmát!
napok = ['hétfő','kedd','szerda','csütrötök','péntek']
#fajl = open('hetnapjai.txt','w',encoding='utf-8')
fajl = open('hetnapjai.txt','w')
for nap in napok:
#print(nap,file=fajl)
fajl.write(nap+' ')
fajl.close()
#tartalom kiírása a kijelzőre
fajl = open("hetnapjai.txt", "r")
print(fajl .read())
#hozzáfűzés
fajl = open('hetnapjai.txt','a',encoding='utf-8')
print('szombat',file=fajl)
print('vasárnap',file=fajl)
fajl.close()
#tartalma
fajl = open("hetnapjai.txt", "r")
print(fajl .read())