2021.12.07. Python - Fájl kezelés (olvasás, írás)
A szövegfájlt az open() függvénnyel nyitjuk meg.
A függvénynek két paraméterével ismerkedünk:
- a fájl neve, ez kötelező
- hogyan nyitjuk meg a fájlt:
- olvasásra (r, mint read),
- írásra (w, mint write),
- vagy hozzáfűzésre (a, mint append)
A második paraméter elhagyható, és ha elhagyjuk, az olyan, mint ha "r" betűt írtunk volna oda, azaz olvasásra nyílik meg a fájl. A "w" és az "a" mód között az a különbség, hogy már létező fájl esetén a "w" egy újjal felülírja a régit, az "a" meg folytatja a régit a végénél.
A bemutatott módszer a Windows Jegyzettömbben mentett fájlokat alapból nem kezeli helyesen, mert azok Windows-1250 kódolásúak. Notepad++-ban ezt tudod állítani. Természetesen a Pythonnak is lehet szólni a helyzetről, de ezzel mi most még egy jó darabig nem foglalkozunk, elvagyunk ékezet nélküli szövegekkel.
A szövegfájlok sorait
- Linuxon LF, azaz LineFeed, azaz soremelés, azaz \n zárja
- Windows-on CRLF, azaz CarriageReturn és LineFeed, azaz kocsivissza és soremelés, azaz \r\n zárja
szerencsére a beolvasott sorok karakterlánc típusúak és a karakterlánc típusnak van egy strip() tagfüggvénye, ami történetesen pont segít ezt a problémát megoldani.
A fájlokat illik a close() tagfüggvénnyel bezárni használat után. A programod futásának végén automatkusan záródnak, ha addig nem tetted volna ezt meg.
1. Feladatunk:
"Notepad++" -ban pelda.txt (Nézet menü, segédjelek megjelenítése, sorvég jelek megjelenítése)
Tartalma:
Első sor, mert ez van elöl
Második sor, mert ez van középen
Harmadik sor, mert ez van hátul
4444
55555
666666
"Spyder"-ben a forráskód első módszer:
lista= []
forrásfájl=open('pelda.txt','r',encoding="utf-8")
for sor in forrásfájl:
újsornélküli=sor.strip()
#lista.append(sor)
lista.append(újsornélküli)
print(lista)
forrásfájl.close()
Második módszer forrása: (egyben beolvas)
lista= []
forrásfájl=open('pelda.txt','r',encoding="utf-8")
tartalom=forrásfájl.read()
print(tartalom)
forrásfájl.close()
Harmadik módszer: (végtelen beolvasás, amennyiben bővül a txt azt rögtön írja)
lista= []
forrásfájl=open('pelda.txt','r',encoding="utf-8")
while True:
sor=forrásfájl.readline()
if sor: # ha a sor üres akkor a logikai értéke False, ha nem üres akkor True
print(sor.strip())
forrásfájl.close()
Negyedik módszer: (másodpercenkét beolvas egy sort)
import time
lista= []
forrásfájl=open('pelda.txt','r',encoding="utf-8")
while True:
sor=forrásfájl.readline()
if sor: # ha a sor üres akkor a logikai értéke False, ha nem üres akkor True
print(sor.strip())
time.sleep(1) # másodpercenként olvas 1 sort
forrásfájl.close()
Ötödik módszer: (karakterenként olvas be)
import time
lista= []
forrásfájl=open('pelda.txt','r',encoding="utf-8")
while True:
betű=forrásfájl.read(1) # egy karakter olvas
if betű:
print(betű,end='', flush=True)
time.sleep(.1)
else:
break
forrásfájl.close()
Hatodik módszer:
lista= []
forrásfájl=open('pelda.txt','r',encoding="utf-8")
lista=forrásfájl.readlines()
másiklista=[]
for elem in lista:
másiklista.append(elem.strip())
print(másiklista)
forrásfájl.close()
Fájba íratásra egy példa kód:
lista= []
forrásfájl=open('pelda.txt','r',encoding="utf-8")
lista=forrásfájl.readlines()
másiklista=[]
for elem in lista:
másiklista.append(elem.strip())
célfájl=open('kiírás.txt','w',encoding="utf-8")
for sor in másiklista:
print(sor,file=célfájl)
célfájl.close()
Megjegyzések
Megjegyzés küldése