Dosya okuma işlemi sırasında while döngüsü içerisinde len() fonksiyonu kullanımı

Selamlar sevgili üstatlar,

fihrist.txt adlı bir metin belgemiz var diyelim, içerisinde de 3 satırlık bir yazı olduğunu varsayın.

Şu aşağıda verdiğim kod doğru şekilde çalışırken ;

fihrist = open("fihrist.txt", "r", encoding="utf-8")

satirSayisi  = 0

while satirSayisi < 3:

    print(fihrist.readline())

    satirSayisi += 1

fihrist.close()

Bu aşağıdaki neden çalışmıyor ?

fihrist = open("fihrist.txt", "r", encoding="utf-8")

satirSayisi  = 0

while satirSayisi < len(fihrist.readlines()):

    print(fihrist.readline())

    satirSayisi += 1

fihrist.close()

Ayrıca 1. (çalışan) yönteme istinaden şöyle bir yolda izledim sonuç yine aynı

fihrist = open("fihrist.txt", "r", encoding="utf-8")

satirlar = len(fihrist.readlines())

satirSayisi  = 0

while satirSayisi < satirlar:

    print(fihrist.readline())

    satirSayisi += 1

fihrist.close()

Dosyanın içeriğini yazmıyor, hata yaptığm ne var :S

Merhaba,

Dosyayı açtıktan sonra readlines fonksiyonunu çağırırsanız, dosya tamamen okunmuş olur ve geriye okunacak bir şey kalmaz. Yani readlines fonksiyonunu bir kez çağırdıktan sonra readline fonksiyonunu çağırmak boş bir string almanızı sağlar. seek metodunu da inceleyin isterseniz.

1 Beğeni

readlines fihrist.txt dosyasindaki her satiri ayirip listede tutar. Dosya okuma islemlerinde bir kez okunan islemi tekrar okumaz. Yani diyelim fihrist.txt dosyasinda 3 satirlik karakter dizisi bulunsun.

Bu kod calistiginde dongude ilk kez len uzunlugu olarak 3 degerini verir. İkinci donuste ise sifir degerini verir, satirSayisi degiskeni 1 degerini aldigindan ve kosula uymadıgından while dongusunden cikilmis olur.

fihrist = open("fihrist.txt", "r", encoding="utf-8")

satirlar = len(fihrist.readlines())

satirSayisi  = 0

while satirSayisi < satirlar:

    print(fihrist.readline())

    satirSayisi += 1

fihrist.close()

Bu kısımda da aynı durum geçerli. 2. satirda sen tüm satirları okursan dosyanin icerigi bos kalir bu yüzden bos satır donderir.

1 Beğeni

Değerli yanıtlarınız için çok çok teşekkür ederim tamamdır şimdi çok daha iyi anladım