6. tēma: Datu pastāvība un Analīze. 1. stunda: Failu I/O.

Tavs šīs stundas izaicinājums: Piešķirt savai programmai "bezmirstību". Tu iemācīsies izmantot Failu I/O (Input/Output), lai saglabātu informāciju (piemēram, spēles progresu vai rezultātu tabulas) cietajā diskā. Mēs apskatīsim trīs galvenos formātus: TXT, JSON un CSV.

SR 2.4.14. (Failu lasīšana un rakstīšana)

Teorija: Failu apstrādes režīmi

Atverot failu, mums ir jāpasaka Python, ko mēs plānojam darīt. Katram režīmam ir sava loma un riski.

Režīms Nosaukums Ko tas dara? Bīstamība
"r" Read Atver failu tikai lasīšanai. Izmetīs kļūdu, ja fails neeksistē.
"w" Write Izveido jaunu failu vai pārraksta esošo. Viss iepriekšējais saturs tiks neatgriezeniski izdzēsts!
"a" Append Pieraksta jaunus datus faila beigās. Drošs — saglabā esošo saturu.

Kāpēc lietot "with open()"?

Šī konstrukcija nodrošina, ka fails tiek automātiski aizvērts, tiklīdz beidzas ar atkāpi rakstītais koda bloks (pat tad, ja programmā rodas kļūda). Tas novērš failu korupciju.

Praktiskie uzdevumi

1. uzdevums: Digitālā dienasgrāmata (.txt)

  1. VS Code izveido failu dienasgramata.py.
  2. Pajautā lietotājam: "Kā Tev šodien gāja?".
  3. Izmanto with open("notes.txt", "w", encoding="utf-8") as f: un ieraksti atbildi failā, izmantojot f.write(atbilde).
  4. Pievieno koda daļu, kas atver šo pašu failu "r" režīmā.
  5. Nolasi saturu mainīgajā (saturs = f.read()) un izvadi to terminālī: print(f"Ieraksts: {saturs}").

2. uzdevums: "Save Game" dzinējs (.json)

  1. Izveido failu game_save.py un faila augšā importē json bibliotēku.
  2. Izveido vārdnīcu speletajs ar datiem: vārds, HP, zelts.
  3. Izmanto json.dump(speletajs, f, indent=4) "w" bloka, lai saglabātu to failā progress.json.
  4. Izveido funkciju (vai jaunu "r" bloku), kas nolasa šo failu, izmantojot json.load(f).
  5. Palielini ielādēto zeltu par 50 un paziņo jauno daudzumu terminālī.

3. uzdevums: Spēlētāju rezultātu tabula (.csv)

  1. Importē csv moduli failā rezultati.py.
  2. Izmanto "a" režīmu, lai atvērtu failu top_rezultati.csv (ar papildus parametru newline="").
  3. Izveido ciklu, kas prasa ievadīt "Spēlētāja vārdu" un "Punktus".
  4. Izmanto writer = csv.writer(f) un writer.writerow([vards, punkti]), lai saglabātu datus.
  5. Kā papildus izaicinājumu — nolasi šo failu "r" režīmā un aprēķini vidējo punktu skaitu.

Biežākās kļūdas:

1. encoding="utf-8" trūkums: Neaizmirsti šo parametru open() funkcijā, citādi latviešu burti (ā, č, ē) failā pārvērtīsies par "ķeburiem".
2. Write vs Append (w pret a): Atceries, ka "w" izdzēsīs visu Tavu faila vēsturi! Ja gribi tikai pievienot jaunu rindiņu, izmanto "a".
3. Aizmirsts import: Tu nevari izmantot json.dump() vai csv.writer(), ja faila pirmajā rindā nav veikts attiecīgais imports.

Koda paraugs: JSON "Save" sistēma

import json

dati = {"vards": "Drosmīgais", "hp": 100, "inventars": ["lāpa"]}

# Datu saglabāšana diskā
with open("save.json", "w", encoding="utf-8") as f:
    # indent=4 padara failu viegli lasāmu cilvēkiem
    json.dump(dati, f, indent=4)
    print("Spēle saglabāta!")

# Datu nolasīšana (ielādēšana)
with open("save.json", "r", encoding="utf-8") as f:
    ieladetie_dati = json.load(f)

print(f"Ielādēts varonis: {ieladetie_dati['vards']}")
Spēle saglabāta!
Ielādēts varonis: Drosmīgais
⬅ Tēmas apkopojums Nākamā stunda ➡