Failiobjekti tagastab funktsioon open()
.
(Kasutatav ka kujul file()
.)
Nendel funktsioonidel on võimalikud kolm argumenti:
esimene on string, milleks on avatava faili nimi, teine
string, mis näitab, mis moel faili avatakse, kolmas
on täisarv, mis näitab, kui palju faili loetakse. Teine
ja kolmas on fakultatiivsed argumendid.
>>>
f=open('katsetus.txt', 'w')>>>
print f <open file 'katsetus.txt', mode 'w' at 80a0960>
Esimene argument on string, mis sisaldab faili nime. Teine argument on samuti string, mis sisaldab tähti, millega on kodeeritud viis, kuidas failiga edasi tegutsetakse. Mood on 'r' siis kui fail avatakse ainult lugemiseks; 'w' kui fail avatakse kirjutamiseks (olemasolev fail, millel on sama nimi, kirjutatakse üle). Mood 'a' avab faili lisamiseks: andmed kirjutatakse faili lõppu. 'r+' avab faili nii lugemiseks kui kirjutamiseks. Moodi argument on fakultatiivne, kui seda ei määrata, siis avatakse fail vaikimisi lugemiseks, nagu 'r' puhul.
Windowsi ja Macintoshi masinate puhul avab 'b' faili binaarmoodis, nii on võimalikud ka moodid 'rb', 'wb', 'r+b'. Windowsis tehakse vahet teksti ja binaarfailide vahel. Realõpu märke muudetakse automaatselt, kui andmeid loetakse või kirjutatakse. Tavalise tekstifaili puhul pole sellest midagi, aga EXE või JPEG failide puhul tuleb hoolikalt jälgida 'b' kasutamist, muidu võivad sellistes failides andmed kaotsi minna.
Järgnevate näidete puhul eeldatakse, et failiobjekt
f
on juba loodud.
Selleks, et lugeda faili f
sisu, kasutatakse
f.read()
.
Võib sisaldada fakultatiivset täisarvulist argumenti,
mis näitab, kui palju failist loetakse.
Meetod loeb
suuruse jagu faili ja tagastab selle sringina.
Kui suurust pole määratud või on see negatiivne, siis
loetakse ja tagastatakse kogu fail. Kui suurus on ette antud, siis
loetakse niipalju faili baitides. Kui jõutakse faili lõppu, siis
tagastatakse f.read()
tühja stringi ("").
>>>
f.read() 'See on kogu fail.\n'>>>
f.read() ''
Faili f
meetod
f.readline()
loeb failist f
ühe rea. Reavahetuse märk (\n) jääb stringi lõppu.
Ära jäetakse ta ainult siis, kui tegemist on faili viimase reaga
ja selle lõpus ei ole reavahetusmärki.
>>>
f.readline() 'See on faili esimene rida.\n'>>>
f.readline() 'Faili teine rida\n'>>>
f.readline() ''
Faili f
meetod
f.readlines()
tagastab loendi, mis sisaldab kõiki ridu failis. Kui on antud ka
suvandparameeter sizehint
,
siis loetakse nii palju faili (baitides) ja
veel niipalju, et rida saaks lõpetatud, siis tagastatakse need read.
Seda
kasutatakse selleks, et sirvida suuri faile ridade kaupa, ilma
et peaks kogu faili korraga mällu lugema.
Tagastatakse ainult
tervikread.
>>>
f.readlines()
['See on faili esimene rida.\n', 'Faili teine rida\n']
Teine võimalus on tekitada tsükkel üle objekti. See ei koorma mälu, on kiire ja lihtne:
>>>
for line in f:...
print line...
See on faili esimene rida. Faili teine rida
Teisena toodud näide on lihtsam, kuid ei võimalda nii üksikasjalikku kontrolli. Kuna erinevad lähenemised kasutavad erinevaid viise rea puhverdamiseks, ei tohiks neid ühe ja sama faili lugemisel segamini kasutada.
Faili f
meetod
f.write(string)
kirjutab stringi faili, tagastab None
.
>>>
f.write('See on katse.\n')
Selleks, et kirjutada faili ka teisi andmetüüpe, on vaja need kõigepealt konverteerida stringiks.
>>>
value = ('vastus on', 42)>>>
s = str(value)>>>
f.write(s)
Faili f
meetod
f.tell()
tagastab täisarvu, mis tähistab failiobjekti jooksvat positsiooni
failis, mõõdetuna baitides faili algusest. Selleks, et muuta
failiobjekti positsiooni, kasutatakse f.seek(offset, millest)
.
Positsioon
arvutatakse lisades offseti referentspunktile. Referentspunkti valib
'millest' argument. Kui 'millest' on 0, siis loetakse faili algusest;
1 kasutab jooksvat positsiooni ja 2 kasutab faili lõppu
referentspunktina. Vaikimisi on 'millest' 0, seega loetakse faili
algusest.
>>>
f = open('katsetus.txt', 'r+')>>>
f.write('0123456789abcdef')>>>
f.seek(5) # mine 6. baidi juurde failis>>>
f.read(1) '5'>>>
f.seek(-3, 2) # mine 3. baidi juurde lõpust arvates>>>
f.read(1) 'd'
Peale faili kasutamist on soovitav kutsuda meetodit
f.close()
,
et faili sulgeda ja vabastada süsteemi ressursid,
mis on seotud avatud failiga.
Peale faili sulgemist
ei saa seda avada enne, kui kasutada uuesti
meetodit f.open()
.
>>>
f.close()>>>
f.read() Traceback (most recent call last): File "<stdin>", line 1, in ? ValueError: I/O operation on closed file