7. Teema Failidega töö

Töö failidega

Faili avamine: f = open(‘file.txt’, mode) (režiimid: r — lugemine, w — kirjutamine, a — lisamine).
Lugemine:
  • f.read(n): Loeb n sümbolit või kogu faili.
  • f.readline(n): Loeb rea (kuni n sümbolit).
  • f.readlines(n): Loeb n rida.
Näide loendisse lugemiseks:
123defLoe_failist(fail):    with open(fail, 'r', encoding="utf-8-sig") as f:        return[rida.strip() forrida inf]
Kirjutamine:
Näide loendi salvestamiseks:
1234defKirjuta_failisse(fail, jarjend):    with open(fail, 'w', encoding="utf-8-sig") as f:        forline injarjend:            f.write(line +'\n')
Sulgemine: f.close() või with automaatseks sulgemiseks.
Faili kustutamine: os.remove(‘fail.txt’) (kui fail olemas).
Failide otsing:
1234fromos importlistdirforfailinimi inlistdir("tee"):    iffailinimi.endswith(".mp3"):        print("MP3 leitud!")

E-kirja saatmine

Moodulid: smtplib, email.message.
Sammud:
  • Sõnumi loomine: message = EmailMessage().
  • Päise seadistamine: message[‘Subject’], message[‘From’], message[‘To’].
  • Sõnumi sisu: message.set_content(«Tekst»).
  • SMTP ühendus: server = smtplib.SMTP(‘smtp.gmail.com’, 587), server.starttls(), server.login(email, password).
  • Saatmine: server.send_message(message), server.quit().
HTML-sisu:
12with open('message.html', 'r') as file:    message.set_content(file.read(), subtype='html')
Pildi manustamine:
123import imghdrwith open('image.jpg', 'rb') as file:    message.add_attachment(file.read(), maintype='image', subtype=imghdr.what(None, file.read()))

JSON

Mõiste: Andmevorming salvestamiseks ja vahetamiseks (objektid, massiivid, numbrid, stringid, true/false, null).
Moodul: import json.
Tehted:
  • Python → JSON: json.dumps(data) (string), json.dump(data, file) (faili).
  • JSON → Python: json.loads(string), json.load(file).
Vormindamine: json.dumps(data, indent=2, sort_keys=True).
Näide:
12345andmed ={"nimi": "Anna", "vanus": 25}with open("andmed.json", "w") as f:    json.dump(andmed, f, indent=2)with open("andmed.json", "r") as f:    print(json.load(f))
Näide API (ilm):
123456importrequestslinn =input("Linn: ")url =f"http://api.openweathermap.org/data/2.5/weather?q={linn}&appid={api_key}&units=metric&lang=et"andmed =requests.get(url).json()ifandmed["cod"] !="404":    print(f"Temperatuur: {andmed['main']['temp']} °C")

Täiendavad soovitused ja näited

Failidega töötamisel:

  • Failide avamisel soovitatakse alati kasutada with-konstruktsiooni. See tagab, et fail suletakse automaatselt ka siis, kui programm katkeb vea tõttu.

Näide:

with open("fail.txt", "r", encoding="utf-8") as f:
    sisu = f.read()

Faili olemasolu kontroll:

Enne lugemist või kustutamist on soovitatav kontrollida, kas fail üldse eksisteerib.

import os

if os.path.exists("fail.txt"):
    print("Fail on olemas")
else:
    print("Faili ei leitud")

Kaustade loomine vajadusel:

Kui on vaja salvestada faile kindlasse kausta, tuleks veenduda, et kaust eksisteerib. Vajadusel saab selle luua.

import os

os.makedirs("andmed", exist_ok=True)

Vigade käsitlemine JSON-failidega:

Faili puudumisel või vigases vormingus võib json.load() visata vea. Selle vältimiseks võib kasutada try-except plokki.

import json

try:
    with open("andmed.json", "r", encoding="utf-8") as f:
        andmed = json.load(f)
except (FileNotFoundError, json.JSONDecodeError):
    andmed = {}

Paroolide käsitlemine e-kirjade saatmisel:

Turvalisuse huvides ei tohiks e-posti paroole otse koodi kirjutada. Selle asemel soovitatakse kasutada keskkonnamuutujaid või väliseid seadistusi.

import os

email = os.getenv("EMAIL")
password = os.getenv("EMAIL_PASSWORD")

Harjutusidee õppimiseks:

Väike projekt, mille abil saab harjutada failide lugemist, kirjutamist ja JSON-vormingut:

Ülesanne: “Artiklihoidla”

  • Programm loeb artiklite pealkirju ja sisu JSON-failist.
  • Kasutaja saab lisada uusi artikleid.
  • Artiklil on pealkiri, autor ja sisu.
  • Andmed salvestatakse JSON-faili.
  • Kuvatakse kõik olemasolevad artiklid.

Kui on soov, võin sellest harjutusest teha näidisrakenduse või juhise samm-sammult. Anna teada.