Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在文本文件中保存变量_Python_User Interface_Python 3.x_Tkinter - Fatal编程技术网

Python 在文本文件中保存变量

Python 在文本文件中保存变量,python,user-interface,python-3.x,tkinter,Python,User Interface,Python 3.x,Tkinter,我想将变量(包括其值)保存到文本文件中,以便下次打开程序时,任何更改都会自动保存到文本文件中 。例如: balance = total_savings - total_expenses 如何将变量本身保存到文本文件中,而不是仅保存其值? 本节用于注册页面 from tkinter import * register = Tk() Label(register, text ="Username").grid(row = 0) Label(register

我想将变量(包括其值)保存到文本文件中,以便下次打开程序时,任何更改都会自动保存到文本文件中 。例如:

    balance = total_savings - total_expenses 
如何将变量本身保存到文本文件中,而不是仅保存其值? 本节用于注册页面

    from tkinter import *
    register = Tk()
    Label(register, text ="Username").grid(row = 0)
    Label(register, text ="Password").grid(row = 1)

    e1 = Entry (register)
    e2 = Entry (register, show= "*")

    e1.grid(row = 0, column = 1)
    e2.grid(row = 1, column = 1)

    username = e1.get()
    password = e2.get()


    button1 = Button(register, text = "Register", command = register.quit)
    button1.grid(columnspan = 2)
    button1.bind("<Button-1>")

    import json as serializer
    with open('godhelpme.txt', 'w') as f:
        serializer.dump(username, f)
    with open('some_file.txt', 'w') as f:
        serializer.dump(password, f)


    register.mainloop()

您必须在编译时知道变量的名称。因此,您需要做的就是:

with open('some_file.txt', 'w') as f:
    f.write("balance %d" % balance)
使用对象将名称映射到值可以更方便地进行管理

您可能还想了解或模块,它们提供了对象的简单序列化,例如

使用序列化程序的方法如下:

您可以在提供的代码中将
pickle
更改为
json
,以使用其他标准序列化程序并以
json
格式存储对象

编辑: 在您的示例中,您试图存储
tkinter
条目
小部件中的文本。读一读

您可能错过的是使用StringVariable捕获输入的文本:

为变量创建
StringVar

username = StringVar()
password = StringVar()
将StringVar变量注册到条目小部件:

e1 = Entry (register, textvariable=username)
e2 = Entry (register, textvariable=password, show= "*")
使用
StringVar
将内容保存在两个单独的文件中:

import json as serializer
with open('godhelpme.txt', 'w') as f:
    serializer.dump(username.get(), f)
with open('some_file.txt', 'w') as f:
    serializer.dump(password.get(), f)
如果要将它们放在同一文件中,请创建映射(
dict
)并将其存储:

import json as serializer
with open('godhelpme.txt', 'w') as f:
    serializer.dump(
        {
            "username": username.get(),
            "password": password.get()
        }, f
    )
编辑2: 在输入文本之前,您正在使用序列化。将
保存
功能(稍后可以退出)注册到注册按钮。这样,在用户单击它之后,它将被称为(这意味着内容已经存在)。以下是如何:

from tkinter import *

def save():
    import json as serializer
    with open('godhelpme.txt', 'w') as f:
        serializer.dump(username.get(), f)
    with open('some_file.txt', 'w') as f:
        serializer.dump(password.get(), f)
    register.quit()

register = Tk()
Label(register, text ="Username").grid(row = 0)
Label(register, text ="Password").grid(row = 1)

username = StringVar()
password = StringVar()

e1 = Entry (register, textvariable=username)
e2 = Entry (register, textvariable=password, show= "*")

e1.grid(row = 0, column = 1)
e2.grid(row = 1, column = 1)

# changed "command"
button1 = Button(register, text = "Register", command = save)
button1.grid(columnspan = 2)
button1.bind("<Button-1>")
register.mainloop()
从tkinter导入*
def save():
将json作为序列化程序导入
以open('godhelpme.txt','w')作为f:
serializer.dump(username.get(),f)
将open('some_file.txt','w')作为f:
serializer.dump(password.get(),f)
register.quit()
寄存器=Tk()
标签(register,text=“Username”).grid(行=0)
标签(register,text=“Password”).grid(行=1)
username=StringVar()
密码=StringVar()
e1=条目(寄存器,textvariable=用户名)
e2=条目(寄存器,textvariable=密码,show=“*”)
e1.网格(行=0,列=1)
e2.网格(行=1,列=1)
#更改了“命令”
button1=按钮(寄存器,text=“寄存器”,命令=保存)
按钮1.网格(columnspan=2)
按钮1.绑定(“”)
register.mainloop()
之前发生的是在用户插入任何数据之前立即执行“保存到文件”过程。通过将函数注册到按钮单击,可以确保仅当按下按钮时,函数才会执行


我建议您在调试环境中使用旧代码,或者使用一些打印来了解代码是如何工作的。

将变量存储在
.txt
文件中通常不是一个好做法,Python也有一个非常好的库。然而,您仍然可以分析这两种方法并选择一种

方法1:

使用
.txt
文件:

with open("variable_file.txt", "w") as variable_file:
    variable_file.write("a = 10")
在检索可使用的值时:

with open("variable_file.txt", "r") as variable_file:
    for line in variable_file.readlines():
        eval(line.strip())
方法2:

使用Pickle模块:

import pickle

a = 10

pickle.dump( a, open( "save.p", "wb" ) )

#Load the variable back from the pickle file.

a = pickle.load( open( "save.p", "rb" ) )

如果我将用户的用户名和密码保存为变量,这是否同样有效?非常感谢:)我在这方面完全是新手,因为你可以告诉我,我们曾经都是编程新手。如果答案有效,您可以接受。@Honeybacker您是如何序列化数据的(字符串?字典?列表?)?我建议您打印数据或使用调试器。如果有问题,请在阅读本文后再问一个问题:我使用了您发布给我的代码,但唯一的问题是引号..我会试试。谢谢你的帮助,我真的很感激
with open("variable_file.txt", "w") as variable_file:
    variable_file.write("a = 10")
with open("variable_file.txt", "r") as variable_file:
    for line in variable_file.readlines():
        eval(line.strip())
import pickle

a = 10

pickle.dump( a, open( "save.p", "wb" ) )

#Load the variable back from the pickle file.

a = pickle.load( open( "save.p", "rb" ) )