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