Dosya yönetimi konusunda bir sorun yaşıyorum

Merhaba. Kullanıcıdan alınan işlem bilgisine göre “sinav_sonuclari.txt” dosyası üzerinde öğrenci ve not bilgisi ekleme, gösterme, kaydetme gibi işlemleri yapabileceğimiz bir kod yazdım. Araştırmam ve uğraşmam sonucu yapmak istediğim bir şeyi nasıl yapacağımı çözemedim. Yapmak istediğim şey şudur ki:
Kullanıcıdan aldığımız isim ya da not güncelleme işlemi bilgisiyle bu “sinav_sonuclari.txt” dosyası üzerinden bu istenilen işlemi yapmak istiyorum. Daha öncesinde yazılan kodlar şu şekilde:

def isim_guncelle():

with open("sinav_notlari.txt","r",encoding="utf-8") as file:

    read = file.read()

    print(read)

with open("sinav_notlari.txt","r+",encoding="utf-8") as file:

    liste = file.readlines()

    guncellenecekIsım = int(input("Güncellemek istediğiniz ismin satır numarası: ")) ; guncellenecekIsım -= 1

    yeni_isim = input("Yeni isim: ")

    liste[guncellenecekIsım] = liste[guncellenecekIsım].split(":")

    liste[guncellenecekIsım][0] = yeni_isim

    file.seek(0)

    liste = (liste)

    file.writelines(liste)

          

    # file.writelines(liste)

    # liste[guncellenecekIsım] = liste[guncellenecekIsım].split(":")

    # liste[guncellenecekIsım][0] = yeni_isim

def not_hesapla(satir):

satir = satir[:-1]

liste = satir.split(":")

ogrenciAdi = liste[0]

notlar = liste[1].split(",")

not1 = int(notlar[0])

not2 = int(notlar[1])

not3 = int(notlar[2])

ortalama = (not1 + not2 + not3) / 3

if ortalama >= 90 and ortalama <= 100:

    harf = "AA"

elif ortalama >= 85 and ortalama <=89:

    harf = "BA"

elif ortalama >= 65:

    harf = "CC"

else:

    harf = "FF"

return f"{ogrenciAdi}: {harf}\n"

def ortalamalari_oku():

with open("sinav_notlari.txt","r",encoding="utf-8") as file:

    for satir in file:

        print(not_hesapla(satir))

def not_gir():

ad = input("Öğrenci adı: ") ; ad = ad.capitalize()

soyad = input("Öğrenci soyadı: ") ; soyad = soyad.upper()

not1 = input("not 1: ")

not2 = input("not 2: ")

not3 = input("not 3: ")



with open("sinav_notlari.txt","a",encoding="utf-8") as file:

    file.write(f"{ad} {soyad}:{not1},{not2},{not3}\n")

def notlari_kayitet():

with open("sinav_notlari.txt","r",encoding="utf-8") as file:

    liste = []

    for i in file:

        liste.append(not_hesapla(i))

    with open("sonuclar.txt","w",encoding="utf-8") as file2:

        for i in liste:

            file2.write(i)

while True:

islem = input("\n1- Notları Oku\n2- Not Gir\n3- Notları Kayıt Et\n4- Öğrenci Güncelle\n")

if islem == "1":

    ortalamalari_oku()

elif islem == "2":

    not_gir()

elif islem == "3":

    notlari_kayitet()

elif islem == "4":

    guncellenecekBilgi = input("1- Öğrenci adı güncelle\n2- Öğrenci not güncelle\n")

    if guncellenecekBilgi == "1":

        isim_guncelle()

    elif guncellenecekBilgi == "2":

        not_guncelle()

else:

    break

isim_guncelle() fonksiyonunda kullanıcının isim güncellemek istediğinde isim güncellemek için kod yazdım fakat write kısmında sorun yaşadım. Bana liste değil de str yazabileceğimi söylüyor. str’ye dönüştürdüğümde de bozuluyor yani satır satır yazmıyor. Bu bahsettiğim güncelleme işlemlerini rahatlıkla yazabileceğim bir yol gösterir misiniz? Teşekkürler.

Merhaba aramıza hoşgeldiniz.
Kodlarınızı daha kolay denemek ve sorunu daha kolay çözmemiz için kodlarınızı buraya göre düzenleyip tekrar atarmısınız :slight_smile:

Hoşbuldum teşekkürler.

def isim_guncelle():
    with open("sinav_notlari.txt","r",encoding="utf-8") as file:
        read = file.read()
        print(read)
    with open("sinav_notlari.txt","r+",encoding="utf-8") as file:
        liste = file.readlines()

        guncellenecekIsım = int(input("Güncellemek istediğiniz ismin satır numarası: "))
        guncellenecekIsım -= 1
        yeni_isim = input("Yeni isim: ")

        liste[guncellenecekIsım] = liste[guncellenecekIsım].split(":")
        liste[guncellenecekIsım][0] = yeni_isim

        file.seek(0)
        liste = (liste)
        file.writelines(liste)
        
def not_hesapla(satir):
    satir = satir[:-1]
    liste = satir.split(":")
    ogrenciAdi = liste[0]
    notlar = liste[1].split(",")

    not1 = int(notlar[0])
    not2 = int(notlar[1])
    not3 = int(notlar[2])

    ortalama = (not1 + not2 + not3) / 3

    if ortalama >= 90 and ortalama <= 100:
        harf = "AA"
    elif ortalama >= 85 and ortalama <=89:
        harf = "BA"
    elif ortalama >= 65:
        harf = "CC"
    else:
        harf = "FF"

    return f"{ogrenciAdi}: {harf}\n"


def ortalamalari_oku():
    with open("sinav_notlari.txt","r",encoding="utf-8") as file:
        for satir in file:
            print(not_hesapla(satir))

def not_gir():
    ad = input("Öğrenci adı: ") ; ad = ad.capitalize()
    soyad = input("Öğrenci soyadı: ") ; soyad = soyad.upper()
    not1 = input("not 1: ")
    not2 = input("not 2: ")
    not3 = input("not 3: ")
    
    with open("sinav_notlari.txt","a",encoding="utf-8") as file:
        file.write(f"{ad} {soyad}:{not1},{not2},{not3}\n")

def notlari_kayitet():
    with open("sinav_notlari.txt","r",encoding="utf-8") as file:
        liste = []

        for i in file:
            liste.append(not_hesapla(i))

        with open("sonuclar.txt","w",encoding="utf-8") as file2:
            for i in liste:
                file2.write(i)

while True:
    islem = input("\n1- Notları Oku\n2- Not Gir\n3- Notları Kayıt Et\n4- Öğrenci Güncelle\n")

    if islem == "1":
        ortalamalari_oku()
    elif islem == "2":
        not_gir()
    elif islem == "3":
        notlari_kayitet()
    elif islem == "4":
        guncellenecekBilgi = input("1- Öğrenci adı güncelle\n2- Öğrenci not güncelle\n")
        if guncellenecekBilgi == "1":
            isim_guncelle()
        elif guncellenecekBilgi == "2":
            not_guncelle()
    else:
        break

Oncelikle yardim rica ettigin insanlarin isini kolaylastirman lazim. Sorun isim_guncelle fonksiyonunda, fakat isim_guncelle'nin hangi sartlar altinda cagrildigini, hangi sartlar altinda bozuldugunu bilmiyoruz. Sistemi bir sure boyunca kullanip hataya denk gelmeyi umit etmemiz lazim.

Daha da kolayi, isim_guncelle, yapmasi gereken isin girdisini kullanicidan almak yerine parametre olarak alsaydi, kod kendi bozuklugunu kendisi gosterebilirdi:

isim_guncelle(2, "ahmet") #ikinci satira ahmet yazmaya calisinda hata aliyorum

Hataya gelince, dosyaya yazmaya calistigin seyi ekrana yazarsan ne oldugunu goreceksin.