簡體   English   中英

將變量保存在文本文件中

[英]Saving a variable in a text file

我想將變量(包括其值)保存到文本文件中,以便下次打開程序時,任何更改都會自動保存到文本文件中。例如:

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

改變代碼:

    from tkinter import *
    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)


    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.get(), f)
    with open('some_file.txt', 'w') as f:
        serializer.dump(password.get(), f)

登錄代碼:

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

    username = StringVar()
    password = StringVar()

    i1 = Entry(login, textvariable=username)
    i2 = Entry(login, textvariable=password, show = "*")

    i1.grid(row = 0, column = 1)
    i2.grid(row = 1, column = 1)

    def clickLogin():
            import json as serializer
            f = open('godhelpme.txt', 'r')
            file = open('some_file.txt', 'r')
            if username == serializer.load(f):
                    print ("hi")
            else:
                    print ("invalid username")
                    if password == serializer.load(file):
                            print ("HELLOOOO")
                    else:
                            print ("invalid password")



    button2 = Button(login, text = "Log In", command = clickLogin)
    button2.grid(columnspan = 2)


    login.mainloop()

您必須在編譯時知道變量的名稱。 所以你需要做的就是:

with open('some_file.txt', 'w') as f:
    f.write("balance %d" % balance)

使用dict對象將名稱映射到值可以更方便地進行管理。

您可能還想閱讀有關picklejson模塊的信息,這些模塊可以輕松地序列化對象,例如dict

使用pickle等序列化程序的方法是:

import pickle as serializer

balance = total_savings - total_expenses 
with open('some_file.txt', 'w') as f:
    serializer.dump( balance, f)

您可以在提供的代碼中將pickle更改為json ,以使用其他標准序列化程序並以json格式存儲對象。

編輯:

在您的示例中,您嘗試存儲來自tkinterEntry小部件的文本。 在這里閱讀它。

你可能錯過的是使用StringVariable來捕獲輸入的文本:

為變量創建StringVar

username = StringVar()
password = StringVar()

將StringVar變量注冊到Entry小部件:

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:

輸入文本之前使用了序列化。 save功能(稍后可以退出)注冊到注冊按鈕。 這樣它將在用戶點擊它之后被調用(這意味着內容已經存在)。 方法如下:

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

之前發生的事情是在用戶插入任何數據之前立即發生了保存到文件的過程。 通過向按鈕單擊注冊功能,您可以確保僅在按下按鈕時才執行該功能。

強烈建議您在調試環境中使用舊代碼,或者使用一些打印來確定代碼的工作方式。

將變量存儲在.txt文件中通常不是一個好習慣,Python有一個非常好的庫作為Pickle 但是,您仍然可以分析這兩種方法並選擇一種。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM