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" ) )