Dosyaya yazı yazdırırken dosyayı boşaltıp okuyor

bir oyun yapıyordum ve oyunuma best skor yapmam gerekiyordu ancak oyun içi skoru alıp dosya ile karşılaştırırken dosyanın içeriğini boşaltıp kontrol ediyor ve bu yüzden sorun yaşıyorum bende bu sorunu daha rahat test edebilemek için sıfırdan bir kod yazıp input la denemek istedim bunu ve gene aynı şeyi yaşadım input la denediğim yöntemin kodu burda:

f = open("best.txt","w+")

if str(f.read()) == "":
    x = input("sayı: ")
    print("dosya boş")
    f.write(x)
else:
    x = input()
    if int(x) > int(f.read()):
        f.write(x)
        print("yaptım")
    else:
        print("büyük değil")

lütfen yardım edin teşekkürler

Merhaba.

Dosyanızı "w+" modunda açtığınız için içeriği siliniyor diye düşünmekteyim.
Bir de "r+" modunda açmayı deneyebilir misiniz?

denedim hocam ama şöyle hata aldım

Traceback (most recent call last):
File “C:\Users\alper\PycharmProjects\Project2\Dersler\deneme.py”, line 9, in
if int(x) > int(f.read()):
ValueError: invalid literal for int() with base 10: ‘’

yanlış anlamadıysam bir şeyi boş olarak alıyor ancak ne f.read() boş ne de x = input()
boş sebebi nedir hocam bu hatanın

Dosyayı birden fazla kez okuyunca, boş bir string return ediyor.
Bunun için f.read() değerini bir değişkene atayıp, o değişkeni kullanmalısınız.
Ya da bir kez okuduktan sonra f.seek(0) ile dosyanın başına dönmelisiniz.

f = open("best.txt","r+")

print(f.read())
f.seek(0)
print(f.read())
1 Beğeni

teşekkürler böyle yapınca kısmen çalışmaya başladı ancak bu sefer de r+ yaptığımız için dosyanın üzerine yazmak yerine ekleme yapıyor ancak benim üstüne yazmam gerekiyor bunu nasıl yapıcağım ? Yeni bir metod açıp örneğin w ile felan tekrar yaparsam çalışıcak mıdır hocam?

Silmek için de truncate() kullanabilirsiniz.
f.truncate(pos=0) ile dosyadaki tüm içeriği silebilirsiniz.

Sildikten sonra dosyanın başına dönüp, istediğiniz verileri ekleyebilirsiniz.

edit:
doğrusu f.truncate(0)

1 Beğeni
Traceback (most recent call last):
  File "dosya_yolu", line 14, in <module>
    f.truncate(pos=0)
TypeError: TextIOWrapper.truncate() takes no keyword arguments

böyle bir hata aldım hocam bir şeyi yanlış mı yaptım acaba

f = open("best.txt","r+")
f.seek(0)

if str(f.read()) == "":
    x = input("sayı: ")
    print("dosya boş")
    f.write(x)
    f.seek(0)
else:
    x = input("sayı: ")
    f.seek(0)
    if int(x) > int(f.read()):
        f.seek(0)
        f.truncate(pos=0)
        f.write(x)
        print("yaptım")
        f.seek(0)
    else:
        print("büyük değil")
        f.seek(0)

kod şuan böyle

f.truncate() olarak kullanırsan çalışacaktır.

2 Beğeni

Tamamdır teşekkürler hepinize çalıştı

1 Beğeni

Yanıtlar güzel, cevaplanmış gayet de güzel.

Bir kaç husus aklımda ilave yapmak istedim.

Dosya açmak için w yerine a kullanabilirsiniz. Bu durumda dosya varsa dosyaya ekleyebilirsiniz. Yani dosya mevcutsa eklemek üzere açar, yoksa oluşturur.

Dosya açma parametreleri için ;

Python File Write (w3schools.com)

Linke bakabilirsiniz.

Sonrasında dosyadan okuma yaparken, belirtildiği üzere dosya sonuna gittiğinden okurken veri döndürmeyecektir. Çünkü dosya sonundadır.

Bu durumda basit bir çözüm var.

Dosyayı kapatır ve tekrar açarsınız bu durumda tekrar başa dönecektir.

Yada daha basiti dosya başına gitmek için.

seek() yordamını kullanabilirsiniz.

f.seek(0) dediğinizde dosya başına dönmüş olacaktır.

3 Beğeni

Kısa bir şekilde temiz özet geçilmiş teşekkürler hocam yorumunuz işin

1 Beğeni