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

Népszerű bejegyzések ezen a blogon

Ágazati alapvizsga (Programozás)

Ágazati alap vizsga (WEB)

HTML + CSS (elmélet+gyakrolat)