首页 > 解决方案 > 为什么我不能在 python 的字典中保存数据?

问题描述

我有一个名为 users 的字典,它保存了他在 kivy 中的 textinput 中输入的用户数据......但是它工作正常但是当我重新运行程序时,信息全部消失了,它没有保存,我需要再次添加用户..它也是一个自动取款机系统,所以我在该字典的值中进行编辑,这意味着我无法将其保存到文件中。

    class Data:
        users = {}
        def add_user(self, email, 
password,name,lastname,country,num,day,month,year,gender,balance,created):
            if email not in self.users:
                self.users[email] = 

[password,name,lastname,country,num,day,month,year,gender,balance,created]

                return 1
            else:
                print("Email exists!")
                return -1
        def get_user(self, email):
            if email in self.users:
                return self.users[email]
            else:
                return -1
        def validate(self, email, password):
            if self.get_user(email) != -1:
                return self.users[email][0] == password
            else:
                return False


    class Depositpage(Screen,Widget,Data):
        def __init__(self, **kwargs):
            super(Depositpage, self).__init__(**kwargs)
            btn1 = Button(text='Add',size_hint=(0.08,0.06),pos_hint= 
 {'x':0.903,'top':0.599},color=(0,0,0,1),background_color=(0,0,0,0))
        btn1.bind(on_release=lambda x: self.add())
        self.txt1= TextInput(multiline=False,size_hint=(0.45,0.13),pos_hint= 
{'x':0.27,'top':0.475},font_size=43)
        #self.ballabel = Label(text="text",font_size=20,pos_hint= 
{'x':-0.04,'top':1.27},color=(0,0,0,1))
        self.add_widget(self.txt1)
        self.add_widget(btn1)
        #self.add_widget(self.ballabel)
    def add(self):
        result = int(self.users['mo@gmail.com'][9]) + int(self.txt1.text)
        self.users['mo@gmail.com'][9] = result
        print(f"add {self.users['mo@gmail.com'][9]}")
        print(self.users['mo@gmail.com'][9])

标签: pythonpython-3.xkivykivy-language

解决方案


字典不是为持久存储数据而设计的。

虽然您可以将其转储到 JSON 文件中,然后从那里加载到您需要的地方?

import json

with open('my_dict.json', 'w') as f:
    json.dump(my_dict, f)

# elsewhere...

with open('my_dict.json') as f:
    my_dict = json.load(f)

从 JSON 加载相当有效。

另一种选择是使用 pickle 和 marshal 模块,但与 JSON 不同的是,它生成的文件不是人类可读的,它将许多 Python 数据类型转换为字节流,然后从字节重新创建对象。

Python 中的数据持久性: https ://docs.python.org/3/library/persistence.html


推荐阅读