Tekstifaili kirjutamine

Tekstifaili kirjutamine toimub sarnaselt selle lugemisele, kuid paari muudatusega.

Faili loomine

Enne, kui saame faili midagi kirjutada, peame selle faili looma. Anname enda faili nimeks paevik.txt

f = open("paevik.txt", "w") # Creates a file named paevik.txt if it's not there.

Kasutasime open funktsiooni, mis oli meil käigus ka faili lugemisel, kuid seekord lisasime 'r' asemel 'w' ehk write mis laseb faili kirjutada ning loob tühja faili nimega paevik.txt, kui seda varem pole tehtud.

Loodud faili (tühja faili) kirjutamine

Oleme loonud tühja päeviku! Mis sinna nüüd kirjutada? Äkki mõtted kuidas Python õppimine seni läinud on? Avame oma tühja faili write olekus ning hakkame kirjutama.

f = open("paevik.txt", "w") # Opens the file to write.

f.write("Mõtted Pythonist") # Writes text to the file.
f.write("To w or not to w, that is the question.") # adds the text right after the last text (no new line)
f.write("Täna jõudsin faili kirjutamiseni.")
f.write("Ma loodan et minu mõtetega midagi ei juhtu..")

f.close() # Closes the file.

NB! Pärast faili kasutamist peab selle ka sulgema! Ei tahaks, et teegi teine sealt midagi lugema hakkaks.

NB! Faili kirjutamisel automaatset reavahetust ei toimu. Kui on soov kirjutada andmeid mitmele reale, tuleb reavahetuse sümbol eraldi kirjutada:

f = open("paevik.txt", "w") # Opens the file to write.

f.write("First line\n") # Writes text to the file and adds a new line symbol.
f.write("Second line here.") # adds the text to the next line

f.close() # Closes the file.

Oleme lisanud nüüd teksti oma päevikusse! Kuid öösel ei saa magada (tüüpiline tudeng) ning tahaks veel midagi kirjutada.

f = open("paevik.txt", "w") # Opens the file to write.

f.write("Peaks magama minema..") # Writes text to the file.

f.close() # Closes the file.

Hommikul ärkad üles ja avastad et sinu päevikus on ainult rida "Peaks magama minema.." Olek write kasutamisel, kirjutatakse varem failis olnud tekst üle ehk iga kord luuakse tühi fail.

Olemasolevasse faili kirjutamine

Kui meil on juba sisuga tekstifail olemas ning tahame sinna midagi lisada, siis võtame kasutusele kolmanda oleku append.

f = open("paevik.txt", "a") # Opens the file to add text to the end.

f.write("Uus päev, uued mõtted") # Writes text to the file.

f.close() # Closes the file.

Nüüd oskame oma päevikusse igapäevaseid mõtteid kirjutada nii, et varem kirjutatu kaotsi ei läheks.

Koodistiil faili kirjutamisel

Lisaks eelnevatele näitedele on teine võimalus, kuidas faile avada. Puhta koodi põhimõttel on selline lähenemine isegi parem, kuna see on selgem ning niimoodi kirjutades ei ole vaja pärast faili avamist seda kinni panna. See läheb automaatselt kinni.

with open("hello.txt", "w") as f:
   f.write("Hello World")

Failidest kokkuvõtvalt

Olek

Kirjeldus

read: r

Avab faili lugemiseks.

write: w

Avab faili kirjutamiseks. Fail kirjutatakse üle. Luuakse uus fail, kui see puudub.

append: a

Avab faili teksti lisamiseks faili lõppu.

CSV-faili kirjutamine

CSV (comma-separeted values) on tekstifail, kus andmed on eraldatud eraldajaga (tavaliselt koma või semikoolon). Esimesel real on tavaliselt veergude pealkirjad. Igal järgmisel real on andmed.

Näide CSV-failist, kus eraldaja on semikoolon (;):

Name;Department;Birthday month
John Smith;Accounting;November
Erica Meyers;IT;March

CSV-faili kirjutamiseks tuleb kõigepealt avada fail kirjutamiseks. Seejärel saab luua CSV-kirjutaja sellest faili objektist.

import csv

data = [
    ['John Smith', 'Accounting', 'November'],
    ['Erica Meyers', 'IT', 'March']
]
with open('file.csv', 'w', newline='') as csv_file:
    csv_writer = csv.writer(csv_file, delimiter=";")
    # header
    csv_writer.writerow(['Name', 'Department', 'Birthday month'])
    for row in data:
        # write list of values
        csv_writer.writerow(row)

Koodinäite puhul tuleb tähele panna, et faili avades anname kaasa newline=''. Kuna csv.writer ise lisab iga rea lõppu reavahetuse, siis tekiks topelt-reavahetus. Seepärast on faili avamisel määratud reavahetuseks tühisõne (reavahetus tekib vaid CSV kirjutajast). Ühtlasi CSV kirjutaja objekti luues anname kaasa eraldajaks semikooloni. Andmeid kirjutatakse faili järjendina - elementide vahele pannakse määratud eraldaja.

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

Video failidega opereerimise kohta: https://www.youtube.com/watch?v=5pAjn3kKRwY