2020. október 13., kedd

Fájlok beolvasása -Python

 Nem számít, hogy milyen lassan megyünk, egészen addig, amíg meg nem állunk.

Ha azt érezzük, hogy a célt, amit kitűztünk magunk elé semmiképp sem tudjuk elérni, 

akkor ne a célunkat módosítsuk, hanem gondoljuk újra a lépéseket, amelyekkel eljutunk odáig.

- Konfúciusz -

hozzuk létre külön text fájlként

"""Hozzunk létre egy 4 soros versikét, egy text fájlban, majd 
olvassuk be az open beépített függvénnyel, kezdjük a nyitó és a 
záró close sorral, hogy biztosítva legyen, ha megnyitottuk le is 
legyen zárva. E kettő közé fogjuk a többi kódot írni """
file = open('20mondasok.txt', 'r')  #read 
print(file)
"""amikor kiprinteljük ezt kapjuk: 
<_io.TextIOWrapper name='20mondasok.txt' mode='r' encoding='cp1250'> 
mivel ez tartalmazza ezeket a szavakat.  Ha ki akarjuk írni txt 
fájlba akkor meg kell adnunk, hogy 
sor = file.readinline() és print(sor)"""
file = open('20mondasok.txt', 'r')
sor = file.readline()
print(sor)
"""ezzel kiírja nekünk az első sort, viszont a karakter kódolása
 nem megfelelő, mimvel nem ismeri fel az ékezetes betűt.
 Ezt úgy tudjuk kiküszöbölni, hogy a file = open('20mondasok.txt', 'r',
 encoding='utf-8') sorba megadjuk az encoding ipari sztenderdet."""
file = open('20mondasok.txt', 'r', encoding='utf-8')
sor = file.readline()
print(sor)
"""így máris szépen be tudja olvasni nekünk az á és í ékezetes betűket,
 ezért ha magyar szöveget akarunk beolvastatni, meg kell adni neki az 
utf-8 as karakter kódolást"""
file = open('20mondasok.txt', 'r', encoding='utf-8')
sor = file.readline()
print(sor.strip())
file.close()
"""Ezzel az első sort tudjuk kiíratni, viszont ha szeretnénk 
kiíratni a sorokat, megtehetjük a for loopal:"""
file = open('20mondasok.txt', 'r', encoding='utf-8')
for sor in file:
    print(sor.strip())
file.close()
# vagy a while-al
file = open('20mondasok.txt', 'r', encoding='utf-8')
sor = file.readline()
while sor:
    print(sor.strip())
    sor = file.readline()
file.close()

"""A különbség az az, hogy a while esetén be kell olvasnunk egy sort.
Tehát, egy több száz vagy ezer sorból álló szöveget kell beolvastatnunk,
 gyakorlatilag mindegy, hogy a for loop-ot vagy a while ciklust használjuk.

Másik módszer a with kontextus menedzser segítségével, megadva a fájl 
nevével, ugyanúgy for ciklust használva, a nyomtatásánál a strip 
kiküszöböli a felesleges sorközöket: """
with open('20mondasok.txt', 'r', encoding='utf-8') as file:
    for sor in file:
        print(sor.strip())
        
"""látható, hogy a with kontextus menedzser magától lezárja a fájl,
 nincs szükség a lezáró sorra, nem kell a file.close() metódust
 meghívnunk. Ezért ennek egyszerűbb is a használata fájl megnyitásra. 
Ha a 20mondasok.txt fájlt egy másik mappába helyezzük át, 
akkor nem fog lefutni, mert nem fogja megtalálni. 
Ilyen esetben meg kell adni neki az útvonalat, hogy hol találja 
meg a txt fájlt. pl: ('mappa/20mondasok,txt')"""

"""Vizsgáljuk meg a következő metódusokat a read a readline és
 a readlines metódusokat:"""

with open('20mondasok.txt', 'r', encoding='utf-8') as file:
    sor = file.readline()
print(sor)

"""ha lefuttatjuk látható, hogy csupán egy sort fog beolvasni,
 de folytathatjuk egy while új sorral"""
with open('20mondasok.txt', 'r', encoding='utf-8') as file:
    sor = file.readline()   
    while sor:
        print(sor.strip())  #olvassa be a sort,
        sor = file.readline()  #majd menjen a következő sorra
        
""" a 'sor' mindig egyenlő esz egy sorral a fájlból, majd kiprinteljük,
 és az utána követekző sor vegye fel a következő sort és olvassa be
 mint stringet. Tehát a readline csak soronként olvassa be a textet.
 Először az első sort, majd a másodikat és így tovább. 
A következő a readlines a readlines többes száma. """
with open('20mondasok.txt', 'r', encoding='utf-8') as file:
    sor = file.readlines()
print(sor)

"""lefuttatva megfigyelhetjük, hogy listába rendezve olvassa be a sorokat.
 A lista első eleme a szöveg első sora lesz, \n jelzi a sor végét,
 ami az new line karakter jelzése, melyet automatikusan hozzá ad. 
Ezt az \n -t is tartalmazza a txt fájl, csak nem látjuk, viszont
 a programunk beolvassa. 
Tehát a readline soronként olvassa be a txt fájlt, a readlines
 pedig az egész blokkot. 

Nézzük meg a read - et, hogyan fog viselkedni """
with open('20mondasok.txt', 'r', encoding='utf-8') as file:
    sor = file.read()
print(sor)

""" a read egyszerre fogja beolvasni nekünk az egész fájl tartalmát,
 mint string objektumot. 
Amíg kis méretű fájlokról van szó, addig nincs is gond azzal, 
ha egyszerre olvastatjuk be. (Nemcsak txt hanem xml fájlokat is 
beolvastathatunk.) Egy akár több millió soros fájl esetén a read 
már nem jöhet szóba, mivel feleslegesen terhelné le a memóriát, 
és az sem biztos, hogy be tudja olvasni. Ha több ezer soros fájlt 
kell beolvastatnunk, akkor mindenképpen érdemes soronként 
beolvastatni a readline segítségével. Ha csak pár tíz vagy pár 
100 sorot szeretnénk beolvastatni, akkor nyugodtan használhatjuk 
a read metódust.  """

Nincsenek megjegyzések:

Megjegyzés küldése

12B 2024.04.16. helyettesítés

 Feladatokat ezen a linken találjátok: http://history.itwebguide.nhely.hu/tori_teszt.html az eredményről a képernyőképet kérem :D