Files
ornekler/dersler/28-dosyalar.md
T
semih 494781e84f Dersler ve Temeller; web örnekleri PORT ortam değişkenini okur
- dersler/: 29 kısa ders (açıklama, çalıştırılabilir örnek, alıştırma). Her örneğin
  ve alıştırma çözümünün çıktısı Online IDE'nin hazırlık adımında gerçekten koşulup
  dosyadakiyle karşılaştırılır; biçim dersler/BICIM.md.
- temeller/: tek konulu 12 başlangıç programı.
- web/anket, web/kisalt, web/pano: port PORT ortam değişkeninden okunur (Online IDE
  önizlemesi 8080 verir), yoksa eski sabit port.
- README: öğrenme bölümü, Online IDE bağlantısı.
2026-10-17 22:07:47 +03:00

4.1 KiB

baslik, bolum, ozet
baslik bolum ozet
Dosyalar Hatalar ve dosyalar Dosyaya yazmak, sonuna eklemek, geri okumak ve JSON ile saklamak

Program bittiğinde değişkenlerdeki her şey kaybolur. Bilgiyi saklamak için dosyaya yazarsın; program bir sonraki çalışmada onu geri okuyabilir. Dosya işlemleri dosya modülündedir; kullan kaba.sistem ile gelir.

Not: Bu dersteki örnekler çalıştıkları klasörde dosya oluşturur. Her örnek önce yazar, sonra aynı programda geri okur.

Yazmak ve okumak

dosya.yaz(yol, metin) dosyayı oluşturur; dosya varsa içeriğini silip yeniden yazar. dosya.oku(yol) bütün dosyayı tek bir metin olarak verir.

kullan kaba.sistem
dosya.yaz("selam.txt", "Merhaba dosya!\n")
icerik = dosya.oku("selam.txt")
yazdir(icerik)
Merhaba dosya!

Her satırın sonuna \n koyarsın; yoksa satırlar yan yana birleşir.

Sonuna eklemek

dosya.ekle(yol, metin) var olan içeriğe dokunmadan sonuna ekler.

kullan kaba.sistem
dosya.yaz("gunluk.txt", "Pazartesi: 5 km koştum\n")
dosya.ekle("gunluk.txt", "Salı: dinlendim\n")
dosya.ekle("gunluk.txt", "Çarşamba: 7 km koştum\n")
yazdir(dosya.oku("gunluk.txt"))
Pazartesi: 5 km koştum
Salı: dinlendim
Çarşamba: 7 km koştum

Dikkat: Bir kayıt eklemek istiyorken dosya.yaz kullanırsan dosyadaki eski her şey silinir. Eklemek için dosya.ekle kullan.

Satır satır işlemek

Okuduğun metni kirp() ile sondaki \n'den arındırıp bol("\n") ile satırlara ayırırsın. Her satırı da ; gibi bir ayraçla bölüp alanlara ulaşırsın.

kullan kaba.sistem
dosya.yaz("alisveris.txt", "ekmek;2;12.50\n")
dosya.ekle("alisveris.txt", "süt;1;34.90\n")
dosya.ekle("alisveris.txt", "domates;3;18.75\n")

toplam = 0.0
dongu satir icinde dosya.oku("alisveris.txt").kirp().bol("\n"):
    parca = satir.bol(";")
    adet = sayi(parca[1])
    tutar = adet * ondalik(parca[2])
    toplam += tutar
    yazdir(f"{parca[0]:<10}{adet:>3}{tutar:>9.2f}")
yazdir(f"{'Toplam':<13}{toplam:>9.2f} TL")
ekmek       2    25.00
süt         1    34.90
domates     3    56.25
Toplam          116.15 TL

Dosya var mı?

Olmayan bir dosyayı okumak hata vermez, boş metin döndürür. Bu yüzden önce dosya.var_mi() ile sorarsın. dosya.sil() dosyayı siler.

kullan kaba.sistem
dosya.yaz("gecici.txt", "deneme\n")
yazdir(dosya.var_mi("gecici.txt"))
dosya.sil("gecici.txt")
yazdir(dosya.var_mi("gecici.txt"))

eger degil dosya.var_mi("ayarlar.txt"):
    yazdir("ayarlar.txt yok, varsayılanlar kullanılacak.")
doğru
yanlış
ayarlar.txt yok, varsayılanlar kullanılacak.

JSON ile saklamak

JSON, sözlük ve listeleri metne çevirmenin yaygın bir biçimidir; başka programlar da okuyabilir. json.uret() bir sözlüğü metne çevirir, json.coz() metni geri çözer.

kullan kaba.sistem
ayarlar = {"tema": "koyu", "yazi_boyutu": 14}
dosya.yaz("ayarlar.json", json.uret(ayarlar))
yazdir(dosya.oku("ayarlar.json"))

okunan = json.coz(dosya.oku("ayarlar.json"))
yazdir(f"Tema: {metin(okunan['tema'])}")
yazdir(f"Yazı boyutu + 2: {sayi(okunan['yazi_boyutu']) + 2}")
{"tema":"koyu","yazi_boyutu":14}
Tema: koyu
Yazı boyutu + 2: 16

JSON'dan çözülen değerin türü derleme anında bilinmez; metin() ve sayi() ile hangi türde kullanacağını açıkça söylersin.

İpucu: Bozuk olabilecek bir dosyayı çözmeden önce json.gecerli_mi(metin) ile denetle; geçerli değilse yanlis döner.

Alıştırma

`notlar.txt` dosyasına üç satır yaz: `Ayşe;88`, `Can;47`, `Elif;92` (ilkini `yaz`, diğerlerini `ekle` ile). Sonra dosyayı okuyup her satırı bölerek notların ortalamasını 1 basamakla `Ortalama: 75.7` biçiminde yazdır.
%%%
kullan kaba.sistem
# buraya yaz
%%%
kullan kaba.sistem
dosya.yaz("notlar.txt", "Ayşe;88\n")
dosya.ekle("notlar.txt", "Can;47\n")
dosya.ekle("notlar.txt", "Elif;92\n")
toplam = 0
satirlar = dosya.oku("notlar.txt").kirp().bol("\n")
dongu satir icinde satirlar:
    toplam += sayi(satir.bol(";")[1])
yazdir(f"Ortalama: {toplam / satirlar.uzunluk():.1f}")
%%%
Ortalama: 75.7