Professional Documents
Culture Documents
!python Programozás 11
!python Programozás 11
programozásba
DIGITÁLIS KULTÚRA 11.
Fájlok kezelése
Milyen fájlok léteznek?
• Nagyon leegyszerűsítve, vannak a:
• Szöveget tartalmazó fájl alatt az egyszerű, formázatlan szöveget értjük, tehát a Word
fájlok nem tartoznak ide
• Kiterjesztések: .txt, .csv, .html stb.
Szövegfájlok beolvasása
forrásfájl = open('allatok.txt’)
forrásfájl.close()
Túl sok a sor
• A szövegfájlok sorainak végén található egy újsor karakter
• Ezen kívül a print() is tesz egy újsor karaktert a kiírt szöveg végére
• Emiatt dupla újsor van kiíráskor a fájl két sora között
print(sor.strip())
Kiírás helyett tároljuk el
• A feladatok megoldása során általában nem kiírni szeretnénk a fájl tartalmát a
képernyőre, hanem el szeretnénk tárolni az adatokat, hogy dolgozhassunk velük
forrásfájl = open('allatok.txt’)
állatok = []
for sor in forrásfájl:
sor = sor.strip()
állatok.append(sor)
forrásfájl.close()
Állatok.txt
• Egy sorban egy állat adatai találhatók, szóközzel elválasztva
• Név
• Fajta
• Kor
Daraboljuk fel a sort
• Ha a sort feldaraboljuk, akkor az egész beolvasás eredménye egy kétdimenziós lista
forrásfájl = open('allatok.txt’)
állatok = []
for sor in forrásfájl:
sor = sor.strip().split(" ")
állatok.append(sor)
forrásfájl.close()
Adatok típusa
• A fájlból beolvasott adatok alapértelmezésben mindig szöveg (string) típusúak
• Ezért ha pl. a korral számolni szeretnénk, számmá kell alakítanunk
forrásfájl = open('allatok.txt’)
állatok = []
for sor in forrásfájl:
sor = sor.strip().split(" ")
sor[2] = int(sor[2])
állatok.append(sor)
forrásfájl.close()
Ugyanez szótárral
• Természetesen ugyanezt megcsinálhatjuk szótárral is
forrásfájl = open('allatok.txt’)
állatok = []
for sor in forrásfájl:
sor = sor.strip().split(" ")
szótár = {'név': sor[0], 'fajta': sor[1], 'kor': int(sor[2])}
állatok.append(szótár)
forrásfájl.close()
Típusalgoritmusok bekért adatokkal
forrásfájl = open('allatok.txt')
állatok = []
for sor in forrásfájl:
sor = sor.strip().split(" ")
szótár = {'név': sor[0], 'fajta': sor[1], 'kor': int(sor[2])}
állatok.append(szótár)
forrásfájl.close()
• Fájl olvasásakor:
forrásfájl = open('allatok.txt', encoding='utf-8')
• Fájl írásakor:
célfájl = open('oreg.txt', 'w', encoding='utf-8')
Egyetlen sor beolvasása
• Érettségi feladatokban sokszor előfordul, hogy az első sor különleges, más van benne
mint a többiben
• Az is előfordul, hogy egy „objektum” két sort is elfoglal
első = forrás.readline()
Összetett
típusalgoritmusok
Összetett?
• Az eddigi típusalgoritmusok: összegzés, megszámlálás, eldöntés, kiválasztás, keresés,
min/maximumkiválasztás
• Ezek egy listához egyetlen értéket rendeltek, pl. az elemek összegét, vagy a legnagyobb
elemet
bevételek = [1, 5, 2, 3, 4]
adózott_bevételek = []
libák = [1, 5, 2, 3, 4]
róka_libái = []
Másolás: 2. feladat
• Adjuk meg a köszöntések listában, hogy az allatok.txt-ben található állatok, milyen
hangon köszöntenek bennünket! Az állatok a fájlban található sorrendben szólalnak
meg.
köszöntések = []
Kiválogatás
1. Járjunk be egy listát
2. Most nem alakítjuk át az elemeket, csak az eredeti formában átmásoljuk őket, de nem
mindet, csak egy bizonyos feltételnek megfelelőket
• Az eredmény most is egy másik lista, az eredeti lista pedig nem módosul
Szétválogatás
1. Járjunk be egy listát
2. Most több új lista is keletkezik:
• az egyikbe azok kerülnek, amik megfeleltek egy feltételnek, a másikba amelyek nem
• vagy az egyik feltételnek megfelelők az egyik új listába kerülnek, egy másik feltételnek megfelelők egy
másik új listába
Szétválogatás: feladat
• Gyűjtsük a megfelelő listába azokat a libákat, amelyeket megtarthat a róka, és azokat,
amelyeket elvesz a farkas!
libák = [1, 5, 2, 3, 4]
róka_libái = []
farkas_libái = []
Gyakorlófeladatok
1. Gyalogtúra
• A tura.txt állományban egy gyalogtúrán 3 percenként rögzített magassági adatokat
találunk. Minden adat egyetlen sorban van, egymástól vesszővel elválasztva.
• Olvassuk be a fájlt, és állítsunk elő egy olyan listát, ami azt mutatja, hogy „Fel” vagy „Le”
változott-e a túrázónál a magasság az előző mérési pont óta! Ha megegyezett a két
érték, egyenlőségjelet tegyünk a listába!
• https://anim.ide.sk/rendezesi_algoritmusok_1.php
Egyszerű cserés rendezés algoritmusa
lista = [5, 3, 9, 1, 7]
lista = [5, 3, 9, 1, 7]
A sort() „helyben rendez”, azaz az eredeti
lista tartalma módosul.
lista.sort()
print(lista)
lista.sort(reverse=True)
print(lista)
Rendezés visszafelé
(legnagyobbtól legkisebbig)
Szövegek rendezése
A nagybetűk előbb vannak, mint bármelyik kisbetű
tört = 3.1415
tört = round(tört, 2) # 3.14
print(round(tört)) # 3
Kerekítés 2.
• Kerekítés f-sztringes kiíráskor:
tört = 3.1415
legkisebb = min(3,6,2,1) # 1
lista = [3,5,6,2,1,7,9,8,2,210,43,64,2,31,54]
legkisebb = min(lista) # 1
legnagyobb = max(lista) # 210
Sum()
• Egy lista elemeinek összegzése
lista = [3,5,6,2,1,7,9,8,2,210,43,64,2,31,54]
összeg = sum(lista) # 447
Listaértelmezés
• Segítségével egy lista elemeit nagyon tömör formában alakíthatjuk át, vagy szűrhetjük
meg
Másolás listaértelmezéssel
• Másoljuk át minden szám kétszeresét listaértelmezés használatával!
lista = [3,5,6,2,1,7,9,8,2,210,43,64,2,31,54]
ketszeres = [szam * 2 for szam in lista]
# [6, 10, 12, 4, 2, 14, 18, 16, 4, 420, 86, 128, 4, 62, 108]
lista = [3,5,6,2,1,7,9,8,2,210,43,64,2,31,54]
paros = [szam for szam in lista if szam % 2 == 0]
# [6, 2, 8, 2, 210, 64, 2, 54]
Összetett adatszerkezetek rendezése
• Egyszerű listákat tudunk rendezni a lista.sort() utasítással
lista = [3,5,6,2,1,7,9,8,2,210,43,64,2,31,54]
lista.sort()
# [1, 2, 2, 2, 3, 5, 6, 7, 8, 9, 31, 43, 54, 64, 210]
• Probléma: ugyanez összetett adatszerkezetekben nem működik, mert nem tudja, melyik
kulcs szerint rendezzen
osztály = [
{"név": "Noémi", "nem": "l", "kor": 15},
{"név": "Dezső", "nem": "f", "kor": 17},
{"név": "Gizi", "nem": "l", "kor": 16},
{"név": "Edömér", "nem": "f", "kor": 16}
]
Lambda függvény
• A lambda függvény a függvények egy nagyon tömör formája
• Olyan, mintha csak egyetlen return utasításból állna a függvény, de még azt sem kell
kiírni
• Mindkét alábbi függvény egy szótár ‚név’ kulcsát adja vissza:
def név(személy):
return személy['név']
• A lambda függvényeknek nincsen neve, ezért így, „önállóan” sosem használjuk, mivel
nem tudnánk meghívni
Rendezés lambda függvénnyel
• A lambda függvényeket arra fogjuk tudni használni, hogy az összetett adatszerkezetből
„kinyerjük” azt az egy értéket, ami alapján rendezni szeretnénk
osztály = [
{"név": "Noémi", "nem": "l", "kor": 15},
{"név": "Dezső", "nem": "f", "kor": 17},
…
]
osztály.sort(key=lambda személy: személy['név’])
Az egész összetett adatszerkezetet rendezi, minden adat megmarad,
de a rendezés során csak a név kulcsot veszi figyelembe.
print(osztály)
# [{'név': 'Dezső', ...., {'név': 'Edömér', ....
A 11. osztályos
tananyag vége