Több adattípus
Estimated reading: 3 minutes
0 views
Fájlfeldolgozásos feladat
Első lépés
Az alloviz
osztály definiálása és inicializálása.
class alloviz:
def __init__(self, sor):
id, nev, tipus, terulet, vizgyujto = sor.split(';')
self.id = int(id)
self.nev = nev
self.tipus = tipus if tipus!='NULL' else ''
self.terulet = float(terulet.replace(',', '.')) if terulet!='NULL' else 0
self.vizgyujto = int(vizgyujto) if vizgyujto!='NULL' else 0
- Az osztályban definiáljuk az
__init__
nevű metódust, amely az objektum inicializálásáért felelős. - A metódus paraméterként kapja meg a
sor
értéket, amely a feldolgozandó adatokat tartalmazza. - A
sor
értéket pontosvesszővel elválasztott adatokra bontjuk asplit(';')
metódus segítségével. - Az adatokat külön változóknak rendeljük, majd ezeket az objektum attribútumainak állítjuk be.
- Az
id
attribútumot egész számként inicializáljuk azint(id)
kifejezéssel. - A
terulet
attribútumot lebegőpontos számként inicializáljuk afloat(terulet.replace(',', '.'))
kifejezéssel, ahol a,
karaktereket a.
karakterre cseréljük. - A
vizgyujto
attribútumot egész számként inicializáljuk azint(vizgyujto)
kifejezéssel. - Ha a
tipus
vagyterulet
értéke „NULL”, akkor azokat üres stringgel (''
) vagy 0-val inicializáljuk.
Második lépés
Az adatok beolvasása és feldolgozása a fájlból.
l = []
with open ('alloviz.txt', 'r', encoding='utf-8') as f:
for sor in f.read().splitlines()[1:]:
l.append(alloviz(sor))
- Létrehozunk egy üres listát
l
néven, amely azalloviz
objektumokat fogja tárolni. - Megnyitjuk a
alloviz.txt
fájlt olvasásra, és azf
nevű változóhoz rendeljük. - A fájl tartalmát beolvassuk, majd soronként feldolgozzuk.
- A sorokat a
splitlines()
metódussal szétválasztjuk, majd a lista második elemtől (az első sort kihagyva) végigmegyünk afor
ciklussal. - Minden sorhoz létrehozunk egy
alloviz
objektumot, amelyet a sorral példányosítunk, majd hozzáadjuk al
listához.
Harmadik lépés
Az adatok elemzése és eredmények kiírása.
print('3.1 feladat:')
print(f'Az adatbázisban {len(l)} tó adatai szerepelnek.')
print('3.2 feladat:')
osszeg = 0
db = 0
for e in l:
if e.terulet != 0:
osszeg += e.terulet
db += 1
print(f'Az állóvizek területének átlaga {osszeg/db:.2f}')
- Kiírjuk a
l
lista elemeinek számát alen(l)
kifejezéssel. - Ezután inicializálunk két változót:
osszeg
ésdb
0 értékkel. - Végigmegyünk a
l
lista elemein afor
ciklus segítségével.
Teljes kód
class alloviz:
def __init__(self, sor):
id, nev, tipus, terulet, vizgyujto = sor.split(';')
self.id = int(id)
self.nev = nev
self.tipus = tipus if tipus!='NULL' else ''
self.terulet = float(terulet.replace(',', '.')) if terulet!='NULL' else 0
self.vizgyujto = int(vizgyujto) if vizgyujto!='NULL' else 0
l = []
with open ('alloviz.txt', 'r', encoding='utf-8') as f:
for sor in f.read().splitlines()[1:]:
l.append(alloviz(sor))
print('3.1 feladat:')
print(f'Az adatbázisban {len(l)} tó adatai szerepelnek.')
print('3.2 feladat:')
osszeg = 0
db = 0
for e in l:
if e.terulet != 0:
osszeg += e.terulet
db += 1
print(f'Az állóvizek területének átlaga {osszeg/db:.2f}')
3.1 feladat:
Az adatbázisban 245 tó adatai szerepelnek.
3.2 feladat:
Az állóvizek területének átlaga 5.46