Tekstifailist lugemine

Pythonis on võimalik txt faile kiirelt ja efektiivselt kasutada, olgu siis selleks informatsiooni talletamine või analüüsimine.

Faili avamine:

Esimese sammuna tuleb õige txt fail avada, millega me tegelema hakkame.

f = open("test.txt", "r") # Opens file with name of "test.txt"

open meetod annab käskluse progammil avada test.txt fail ning r määrab ära, et tegemist on read ehk faili lugemisega. Faili kirjutamiseks kasutame “w” ehk write.

Kui oleme õige tekstifaili asukoha leidnud ning selle avanud, siis saame hakata sealt lugema.

Failist lugemine:

Faili sisu on võimalik lugeda mitmel viisil.

  • file.read(n) loeb failist hulga n suuruses tähti, kui n on tühi, siis loeb terve faili.
  • file.readline(n) loeb failist n tekstirea.

Oletame, et meie test.txt faili sisu näeb välja selline:

Tere.

Mina olen fail.

f = open("test.txt","r") # Opens file with name of "test.txt"

# Reads one character of the file.
print(f.read(1)) # -> T

# Reads the whole file.
print(f.read()) # -> ere.\n Mina olen fail.

Kuna Python on laisk, siis ei hakka programm tekstifaili uuesti algusest lugema, vaid liigub sealt edasi, kus tal pooleli jäi. Kõigepealt lasime programmil lugeda tekstifailist ühe “T” tähe ning järgmisena tahtsime, et ta loeks terve faili. Kuna “T” täht oli juba ära loetud, siis alustas programm lugemist “e” tähest.

Kuna nüüd teame, et failisisu loetakse sealt, kus lugemine pooleli jäi, siis saame katsetada ka faili lugemist ridade kaupa.

f = open("test.txt","r") # Opens file with name of "test.txt"

# Reads an entire line from the text file.
print(f.readline()) # -> Tere.

# Reads an entire line from the text file.
print(f.readline()) # -> Mina olen fail.

Teadsime, et meie failis oli kaks rida teksti ning seepärast saime readline() käsku välja kutsuda kaks korda. Kui meil on tegemist suurema tekstifailiga, siis saame luua tsükkli, mis loeb automaatselt faili kõik read eraldi.

f = open("test.txt","r") # Opens file with name of "test.txt"

for line in f: # Loops over the file object and reads each line.
    print line

Lihtsa listi saamiseks, mis sisaldab kõiki tekstifaili ridu, kasutatakse readlines() käsku.

f = open("test.txt","r") # Opens file with name of "test.txt"

print(f.readlines()) # -> ["Tere.", "Mina olen fail."]

Faili sulgemine:

STOP! Kuhu sa nüüd jooksed!? Enne töö lõpetamist tuleb ka avatud tekstifail sulgeda.

Meetod close() sulgeb avatud faili. Pärast seda meetodit ei ole võimalik faili lugeda või sellesse kirjutada.

f = open("test.txt","r") # Opens file with name of "test.txt"

# Reads an entire line from the text file.
print(f.readline()) # -> Tere.

f.close() # Closes the file.

print(f.readline()) # -> ValueError : I/O operation on closed file.

Failide lugemine “with” abil

Faile saab lugeda ka kasutades with. See muudab failide töötlemise palju kergemaks, sest kõik failid, mis avatakse suletakse automaatselt. Lisaks muudab koodi lihtsamaks, sest erindeid ei pea püüdma try-finally blokkidega.

with open("test.txt") as f:     # Opens file with name of "test.txt"
    data = f.read()     # Reads all the lines from the file and saves it as a string.
print(f.closed)     # prints "True" to show that file has been closed.

Sama meetodi abil saab ka faili ridu ükshaaval läbi käia.

# Opens the file.
with open("testfile.txt") as f:

    # Loops over the file one line at a time.
    for line in f:
    # Prints the current line
        print(line)
# Prints "True" to show that the file has been closed
print(f.closed)

CSV failide lugemine

CSV-fail on lihtne teksitfail, milles hoitakse tabelikujulist infot. CSV-failides eraldatakse andmed veergudes erinevate sümbolitega, enamasti komadega. Esimesel real on tavaliselt veergude nimed ning igal järgmisel real on andmed. Eraldavat märki kutsutakse “delimiter”. Näide CSV-failist, kus eraldajaks on koma:

name,department,birthday month
John Smith,Accounting,November
Erica Meyers,IT,March

CSV-failide lugemiseks on vaja teada eraldusmärki.

import csv

# Opens the file.
with open('file.txt') as csv_file:

    # Saves the file as a csv.reader object and separates the lines in file to lists of strings which were separated by the delimiter.
    csv_reader = csv.reader(csv_file, delimiter=',')

    # Loops over each line in file.
    for row in csv_reader:

        # Prints the list of strings in that line.
        print(row)

Selle koodi jooksutamise tulemus:

['name', 'department', 'birthday month']
['John Smith', 'Accounting', 'November']
['Erica Meyers', 'IT', 'March']

Lisalugemist ametlikust dokumentatsioonist: https://docs.python.org/3/library/csv.html