Python Yeni yazılan verinin, eski veriyi silip yeni veriyi kaydetmesi

Yok yok sanırım anladım. r+ kullanacağım ve neler olacak göreceğim. Hemen deniyorum teşekkür ederim.

JSON kullanirken \n kullanilmaz. JSON kullanirken yeni satir icin \n kullanmana gerek yok, o isi JSON icin kullandigin kutuphane hallediyor zaten.

a ile append etmek yerine önce load ettiğine veriyi ekleyip tekrar yazmayı düşünebilirsin.
Örnek;
Python:
import json
dict = {}
data = json.load(open("file.json", "r"))
dict["new key"] = "new value"
for key in dict:
    data[key] = dict[key]
json.dump(data, open("file.json", "w"))

JSON:
{
    "test" : "value"
}

Eki Görüntüle 2103113

Böylece üstüne ekleme yapacak ve appenddeki gibi istenmeyen baştan tümünü ekleme durumu söz konusu olmayacak.
Harika gözüküyor anlatımınız teşekkür ederim. Ben hep karmaşık şekilde yaptım kodlamayı ve hep öyle çalıştırdım 😄 Tekrargözden geçirip anladığımda deneyeceğim sizin de dediğinizi. Çok teşekkür ederim!

İnceleyip dönüş yapacağım fakat aklıma başka bir çözüm yolu geldi. Kaydetme fonksiyonunda kaydedeceğiniz verileri dict formatında bir değişkene atayıp dump kullanarak ekleyemez misiniz? Çok sallamasyon bir şey söylemiş olabilirim.
Dostum, nasıl oldu bilmiyorum ama sadece 1 şey uzaktayız. @TheAny hocamın dediklerini de dikkate alarak \n'den vazgeçip sizin de bu fikrinizle elimden geldiğince bir şeyler denedim:
Python:
import tkinter as tk
from tkinter import messagebox
import json
import os

def load_data():
    try:
        with open("db/klasor_nolar.json", "r") as file:
            return json.load(file)
    except FileNotFoundError:
        return {}

def save_data(data):
    existing_data = load_data()  # Mevcut veriyi yükleyin
   
    for klasor_no, sirketler in data.items():
        if klasor_no in existing_data:
            existing_data[klasor_no].extend(sirket for sirket in sirketler if sirket not in existing_data[klasor_no])
        else:
            existing_data[klasor_no] = existing_data.get(klasor_no, []) + sirketler

    with open("db/klasor_nolar.json", "w") as file:
        json.dump(existing_data, file)

klasor_nolar = load_data()

def sirket_ekle():
    sirket_adi = entry_sirket.get().upper()
    klasor_no_str = entry_klasor.get()

    try:
        klasor_no = int(klasor_no_str)
        if klasor_no > 0:
            if klasor_no in klasor_nolar:
                klasor_nolar[klasor_no].append(sirket_adi)
                sonuc = f"{sirket_adi} şirketi {klasor_no} numaralı klasöre eklendi."
            else:
                klasor_nolar[klasor_no] = [sirket_adi]
                sonuc = f"{sirket_adi} şirketi {klasor_no} numaralı klasöre eklendi."
            
            # Verileri kaydet
            save_data(klasor_nolar)
        else:
            sonuc = "Hata: Klasör numarası pozitif bir tam sayı olmalıdır."
    except ValueError:
        sonuc = "Hata: Klasör numarası geçersiz."

    result_text.delete(1.0, tk.END)
    result_text.insert(tk.END, sonuc)

Bunu yaptıktan sonra da programı kapatarak, kaydedip çıktım. Önce kaydedilmeyen .json dosyasını göstereceğim:

{"1": ["TEST1"], "2": ["ATAK MADEN\u0130", "DENTA\u015e AMBALAJ", "D\u00d6NMEZ DEBR\u0130YAJ", "HEDEF HOLD\u0130NG", "ENEKO HAVALANDIRMA"], "3": ["SEY\u0130TLER K\u0130MYA", "\u0130ZELTA\u015e \u0130ZM\u0130R", "L\u0130NDE OPSAN"], "4": ["TESTER TEST"], "5": ["\u00d6Z AS\u0130L", "FADE GIDA"], "6": ["GREENF\u0130T PLAST\u0130K", "HEDEF G\u0130R\u0130\u015e\u0130M", "ZEN G\u0130R\u0130\u015e\u0130M"], "7": ["ATAYLAR \u00d6RME", "\u0130STTELKOM \u0130STANBUL", "\u0130STANBUL SPOR", "METEOR END\u00dcSTR\u0130", "METEOR \u0130N\u015eAAT", "TAR\u0130\u015e ZEYT\u0130N"], "8": ["HMS MAK\u0130NA", "BERKE ELEKTR\u0130K", "Z\u00dcLF\u0130KARLAR K\u0130MYEV\u0130", "TESLA ENERJ\u0130", "AK\u00c7A K\u0130MYEV\u0130"], "9": ["KZC \u0130\u00c7", "\u0130LKNAK SU", "ALTINBA\u015e PETROL"], "10": ["D\u0130NAM\u0130K ISI", "\u015eANLI \u0130LA\u00c7", "AVOD KURUYEM\u0130\u015e", "\u0130ZDEM\u0130R ENERJ\u0130"]}

Bu ise kaydedilip çıkıldığındaki hali:

{"1": ["TEST2", "TEST1"], "2": ["ATAK MADEN\u0130", "DENTA\u015e AMBALAJ", "D\u00d6NMEZ DEBR\u0130YAJ", "HEDEF HOLD\u0130NG", "ENEKO HAVALANDIRMA"], "3": ["SEY\u0130TLER K\u0130MYA", "\u0130ZELTA\u015e \u0130ZM\u0130R", "L\u0130NDE OPSAN"], "4": ["TESTER TEST"], "5": ["\u00d6Z AS\u0130L", "FADE GIDA"], "6": ["GREENF\u0130T PLAST\u0130K", "HEDEF G\u0130R\u0130\u015e\u0130M", "ZEN G\u0130R\u0130\u015e\u0130M"], "7": ["ATAYLAR \u00d6RME", "\u0130STTELKOM \u0130STANBUL", "\u0130STANBUL SPOR", "METEOR END\u00dcSTR\u0130", "METEOR \u0130N\u015eAAT", "TAR\u0130\u015e ZEYT\u0130N"], "8": ["HMS MAK\u0130NA", "BERKE ELEKTR\u0130K", "Z\u00dcLF\u0130KARLAR K\u0130MYEV\u0130", "TESLA ENERJ\u0130", "AK\u00c7A K\u0130MYEV\u0130"], "9": ["KZC \u0130\u00c7", "\u0130LKNAK SU", "ALTINBA\u015e PETROL"], "10": ["D\u0130NAM\u0130K ISI", "\u015eANLI \u0130LA\u00c7", "AVOD KURUYEM\u0130\u015e", "\u0130ZDEM\u0130R ENERJ\u0130"], "1": ["TEST2"]}

Gördüğünüz gibi 1 no'lu dosyaya "TEST2" şirketini ekledim. İlk kategoride kaydedilmiş olurken, aynı zamanda yazının sonunda da kaydedildiği için sadece son kaydedilen kısmı gösteriyor ve sanki 1 no'lu klasörde sadece "TEST2" şirketi varmış gibi gözüküyor.


Bunu çözersek her şey bitiyor! Çok heyecanlıyım şu anda.
 
Son düzenleme:

Yeni konular

Geri
Yukarı