Python – fájlkezelés

10. osztály 10.évf Python Programozás Python

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