7. Failidega töö

  1. Failidega töö
    1. Faili avamine
    2. Failist lugemine
    3. Faili sulgemine
    4. Mugavam viis: with
    5. Failist lugemise funktsioon
    6. Faili kirjutamise funktsioon
    7. Faili kustutamine
    8. Failide otsing kaustas
  2. E-kirja saatmine Pythonis
    1. Moodulite import
    2. E-kirja päise seadistamine
    3. E-kirja tekstisisu
    4. SMTP-serveri seadistamine
    5. Konto autentimine ja saatmine
    6. HTML-sisuga e-kiri
    7. Pildi manustamine
  3. Mis on JSON?
    1. Mooduli import
    2. Python → JSON string
    3. JSON faili salvestamine
    4. JSON faili lugemine
    5. Formaaditud väljastus
    6. Keerulisem JSON struktuur
    7. Näidisprojekt: Ilmateade JSON API-st

Failidega töö

Faili avamine

Faili avatakse open() funktsiooniga, kus tuleb määrata faili nimi ja režiim.

f = open('file.txt', 'r')  # 'r' tähendab lugemist

Fail saab avada mitmes režiimis:

  • ‘r‘ – ainult lugemiseks
  • ‘w’ – kirjutamiseks (kustutab vana faili sisu või loob uue)
  • ‘a’ – lisamiseks (uus sisu lisatakse faili lõppu)

Failist lugemine

Failist saab lugeda erinevatel viisidel:

f.read()         # loeb kogu faili sisu
f.readline()     # loeb ühe rea
f.readlines()    # loeb kõik read listiks

Need meetodid võimaldavad lugeda kogu faili korraga või ridade kaupa.

Faili sulgemine

Fail tuleb pärast kasutamist sulgeda:

f.close()

Faili sulgemine on oluline, et vabastada süsteemi ressursid ja tagada, et kõik andmed oleksid salvestatud.

Mugavam viis: with

with open('file.txt', 'r') as f:
    for line in f:
        print(line)

with konstruktsioon sulgeb faili automaatselt pärast kasutamist – turvalisem ja lühem viis töötamiseks.

Failist lugemise funktsioon

def Loe_failist(fail: str) -> list:
    with open(fail, 'r', encoding="utf-8-sig") as f:
        return [rida.strip() for rida in f]

Loeb faili sisu ridade kaupa listi, eemaldades iga rea lõpust tühikud ja reavahetused.

Faili kirjutamise funktsioon

def Kirjuta_failisse(fail: str, jarjend: list):
    with open(fail, 'w', encoding="utf-8-sig") as f:
        for line in jarjend:
            f.write(line + '\n')

Kirjutab listis olevad andmed faili, iga elemendi eraldi reale.

Faili kustutamine

from os import path, remove
if path.isfile("fail.txt"):
    remove("fail.txt")

Kontrollib, kas fail eksisteerib ja kustutab selle. Kasulik ajutiste failide või logide haldamiseks.

Failide otsing kaustas

from os import listdir
failinimed = listdir("C:\\Users\\kasutaja\\Music")
mp3_leidub = any(fail.endswith(".mp3") for fail in failinimed)
print(mp3_leidub)

Otsib kaustast konkreetse laiendiga faile, nt .mp3. Kasulik failide automaatseks tuvastamiseks.

E-kirja saatmine Pythonis

Moodulite import

import smtplib
from email.message import EmailMessage

smtplib võimaldab e-kirju saata SMTP-protokolli kaudu.
EmailMessage võimaldab meil koostada e-kirja koos päiste, sisu ja manustega.

E-kirja päise seadistamine

message = EmailMessage()
message['Subject'] = "Email test from Python"
message['From'] = "your_email@gmail.com"
message['To'] = "receiver_email@address.com"

Siin määrame e-kirja teema, saatja ja saaja aadressi

E-kirja tekstisisu

message.set_content("Hello from Python!")

See on e-kirja põhisisu. Tekst kuvatakse tavalise kirjana.

SMTP-serveri seadistamine

server = smtplib.SMTP("smtp.gmail.com", 587)
server.ehlo()
server.starttls()

Loome ühenduse Gmaili SMTP-serveriga, kasutades porti 587 ja turvalist TLS-ühendust.

Konto autentimine ja saatmine

server.login("your_email@gmail.com", "your_email_password")
server.send_message(message)
server.quit()

Sisselogimine e-posti kontole ning e-kirja saatmine.
Märkus: Gmaili puhul peab kasutama App password.

HTML-sisuga e-kiri

with open('message.html', 'r') as file:
    html_sisu = file.read()
message.set_content(html_sisu, subtype='html')

Failist loetud HTML lisatakse e-kirja sisuks. Saab kasutada värve, linke, päiseid jms.

Pildi manustamine

import imghdr
with open('image.jpg', 'rb') as file:
    image_data = file.read()
message.add_attachment(image_data, maintype='image', subtype=imghdr.what(None, image_data))

Avame pildi binaarselt ja lisame selle manusena e-kirjale.
imghdr tuvastab automaatselt pildi tüübi (nt jpg, png).

Mis on JSON?

JSON (JavaScript Object Notation) on andmeformaat, mida kasutatakse:

  • andmete salvestamiseks
  • andmete vahetamiseks süsteemide vahel

Mooduli import

import json

Standardmoodul JSON-andmetega tööks.

Python → JSON string

andmed = {"nimi": "Anna", "vanus": 25, "abielus": False}
json_string = json.dumps(andmed)

dumps() teisendab dict-objekti JSON-stringiks.

JSON faili salvestamine

with open("andmed.json", "w") as f:
    json.dump(andmed, f)

Salvestab Python dict objekti JSON-faili.

JSON faili lugemine

with open("andmed.json", "r") as f:
    andmed_failist = json.load(f)

Laeb JSON-failist andmed ja muudab need Python objektiks.

Formaaditud väljastus

print(json.dumps(andmed, indent=2, sort_keys=True))

Prindib JSON andmed ilusti loetavas kujus – sorteeritud võtmed ja taandega

Keerulisem JSON struktuur

klass = {
  "opetaja": "Tamm",
  "opilased": [
    {"nimi": "Mari", "hinne": 5},
    {"nimi": "Jüri", "hinne": 4}
  ]
}

with open("klass.json", "w") as f:
    json.dump(klass, f, indent=2)

JSON toetab pesastatud andmestruktuure – listid, dictid, objektid jm

Näidisprojekt: Ilmateade JSON API-st

import requests
import json

linn = input("Sisesta linna nimi: ")
api_voti = "SINU_API_VÕTI"
url = f"http://api.openweathermap.org/data/2.5/weather?q={linn}&appid={api_voti}&units=metric&lang=et"

vastus = requests.get(url)
andmed = vastus.json()

if andmed.get("cod") != "404":
    print(f"Temperatuur: {andmed['main']['temp']}°C")
else:
    print("Linna ei leitud.")

Teeme HTTP-päringu, saame vastuseks JSON andmed ja töötleme neid Pythonis.
Tüüpiline kasutus: veebiteenuste ühendamine.

JÄRGMINE TEEMA