Failide lugemine Pythonis19. Oct '14

Pythoni tekstifaili avamise meetod open püüab faili avada operatsioonisüsteemi vaikimisi kodeeringus, mis Linuxis on ASCII ning Eesti regionaalsätetega (?) Windowsis CP1257. Püüdes lugeda UTF-8 kodeeringus faili mille sisuks on "jäääär" saame üpris ootamatu tulemuse:

with open("failinimi.txt") as fh:
    buf = fh.read()
    print buf
    print len(buf)  # tagastab str
    print type(buf) # tagastab 10

Hilisemad Python 2.x väljalasked lisasid codecs mooduli, mille abil saab tekstifaili avada ette antud kodeeringus:

import codecs
with codecs.open("failinimi.txt", encoding="utf-8") as fh:
    buf = fh.read()
    print len(buf)  # tagastab unicode
    print type(buf) # tagastab 6

Kuna Python 3-s on open funktsiooni ümber tehtud, et see võimaldaks kodeeringu järgi faili avada soovitaks mina teha Python 2.x koodis hoopis nii:

from future.builtins import open
with open("failinimi.txt", encoding="utf-8") as fh:
    buf = fh.read()
    print len(buf)  # tagastab unicode
    print type(buf) # tagastab 6

Nii piisab Python 3-le ülekolimisel pelgalt import rea kustutamisest.

Faili lugemine rea kaupa

Ülal näidatud read() meetod loeb kogu faili puhvrisse. Suuremate failide puhul tuleb kasutada mõnda dünaamilisemat lähenemist. Tekstifailide puhul on tavapärane lugeda faili ridade kaupa:

with open("failinimi.txt") as sisend:
    for rida in sisend:
        print rida

Faili lugemine binaarkujul

Faili lugemine 32kB kaupa:

with open("failinimi.bin", "rb") as sisend:
    while True:
        puhver = sisend.read(32768)
        if not puhver:
            break
        # Tee midagi puhvriga
Python Unicode