Szöveges állományt az open paranccsal nyithatunk meg, az alapértelmezett mód az olvasás. A létrejött objektum a .readline() metódussal megadja az első, azután rendre a következő sorok értékét:
>>> file= open('inf_e_20141017_m_04_foglaltsag.txt') >>> line= file.readline() >>> line 'xxoxoxoxoxoxooxxxxox\n' >>> line= file.readline() >>> line 'xxxxxxxxxxxxxxxxooox\n'
Amint látjuk, a sorokat lezáró sorvégjel is része a beolvasott értéknek. Ennek megfelelően az üres(nek látszó) sor nem üres stringet ad; üres stringet az állomány végén kapunk. Ezt felhasználhatjuk az ismétlés lezárásához:
>>> file= open('inf_e_20141017_m_04_foglaltsag.txt') >>> line= file.readline() >>> while line != '': ... line= file.readline() ...
A fenti parancsok sok hasznot persze nem hajtanak, viszont megmutatják a python vezérlési szerkezeteinek egy fontos jellemzőjét: a ciklusfeltételt kettőspont zárja le, a ciklusmag sorai pedig (kötelezően) beljebb kezdődnek. A beljebbezés javasolt mértéke négy szóköz (lásd ehhez a python megfelelő ajánlását: PEP-0008.)
>>> file= open('inf_e_20141017_m_04_foglaltsag.txt') >>> lst = [] >>> line= file.readline() >>> while line != '': ... lst = lst + [line] ... line= file.readline() ... >>> lst ['xxoxoxoxoxoxooxxxxox\n', 'xxxxxxxxxxxxxxxxooox\n', 'xoxoxoxoxoxoxoxoxoxo\n', 'ooxoxoxoxoxoxoxooxox\n', 'xxxxxxxxxxxxxxxxoooo\n', 'xxxxxxxxxxxxxxxxxxxx\n', 'oooooooooooooooooooo\n', 'xxxxxxxxxxooxxxxxxxx\n', 'xooxxxxxxxxxoxxxxxoo\n', 'xxxxxxoxxxxxxxoxxooo\n', 'xooooooooxoooooooxxx\n', 'ooooooxoxoxoxoxoxoxo\n', 'oxxxxxxxxxxxxxxxxxoo\n', 'xxxxxxxxxxxxooooooox\n', 'oxxxxxxxxxxxxxoooooo\n']
A parancssorban a ciklusmagot egy üres sor zárta le, ezt követően (azaz az ismétlés befejeződése után) írathattuk ki az lst változó értékét. (Ennek kimenete a jobb olvashatóság érdekében áttördelve.)
Láthatjuk, hogy összetett struktúrákat is felépíthetünk a paracssorban, de ez még a felfelé mutató nyíllal elérhető parancssori ismétlés lehetőségeit kihasználva is hamarosan igen nehézkessé válnék, ezért e ponton elkezdünk programokat írni.
Más nyelvek hasonló szerepű += konstrukcióját itt felhasználhatjuk a listához való hozzáfűzéshez (is):
print('1. feladat') print('A foglaltsag.txt állomány adatainak olvasása…') file= open('inf_e_20141017_m_04_foglaltsag.txt') lst = [] line= file.readline() while line != '': lst+= [line] line= file.readline() print(lst)
Két állomány adatainak olvasásához értelemszerűen új változóneveket használva, s a bemeneti állományok sorvégjeleit levágva:
print('1. feladat') print('A foglaltsag.txt állomány adatainak olvasása…') file = open('inf_e_20141017_m_04_foglaltsag.txt') l_fogl= [] line = file.readline() while line != '': l_fogl+= [line[:-1]] line = file.readline() print('A kategoria.txt állomány adatainak olvasása…') file = open('inf_e_20141017_m_04_kategoria.txt') l_kat = [] line = file.readline() while line != '': l_kat += [line[:-1]] line = file.readline() #print (l_fogl, l_kat)
Feltételeztük, hogy a bemeneti állomány minden sorát \n zárja le. Elképzelhető, hogy ez az utolsó sor esetén hiányzik – ilyen esetben természetesen óvatosabbnak kell lennünk az utolsó karakter levágásával.
A megnyitott állományokat illő lett volna lezárnunk, ezt megtehetjük a file.close() utasítással (erre a kérdésre azonban később visszatérünk még).
A # megjegyzést vezet be: az adott helyen nem kell kiíratnunk a változók értékét, de ez nyilván sokszor lehet hasznos a program tesztelése során.