天天看點

Python新手入門之存儲資料

很多程式都要求使用者輸入某種資訊,如讓使用者存儲遊戲首選項或提供要可視化的資料。不管專注的是什麼,程式都把使用者提供的資訊存儲在清單和字典等資料結構中。使用者關閉程式時,你幾乎總是要儲存他們提供的資訊;一種簡單的方式是使用子產品json 來存儲資料。 子產品json 讓你能夠将簡單的Python資料結構轉儲到檔案中,并在程式再次運作時加載該檔案中的資料。你還可以使用json 在Python程式之間分享資料。更重要的是,JSON資料格式并非Python專用的,這讓你能夠将以JSON格式存儲的資料與使用其他程式設計語言的人分享。這是一種輕便格式,很有用,也易于學習。

1.1 使用json.dump() 和json.load()

編寫一個存儲一組數字的簡短程式,再編寫一個将這些數字讀取到記憶體中的程式。第一個程式将使用json.dump() 來存儲這組數字,而第二個程式将使 用json.load() 。 函數json.dump() 接受兩個實參:要存儲的資料以及可用于存儲資料的檔案對象。示例如下:

Python新手入門之存儲資料

執行結果:

Python新手入門之存儲資料

下面再編寫一個程式,使用json.load() 将這個清單讀取到記憶體中。示例如下:

Python新手入門之存儲資料

執行結果:

Python新手入門之存儲資料

1.2 儲存和和讀取使用者生成的的資料

對于使用者生成的資料,使用json儲存它們大有裨益,因為如果不以某種方式進行存儲,等程式停止運作時使用者的資訊将丢失。

我們可以先寫一個程式,将名字儲存下來。示例如下:

Python新手入門之存儲資料

執行結果:

Python新手入門之存儲資料

在寫一個程式,讀出使用者名。示例如下:

Python新手入門之存儲資料

執行結果:

Python新手入門之存儲資料

我們需要将這兩個程式合并到一個程式(remember_me.py)中。這個程式運作時,我們将嘗試從檔案username.json中擷取使用者名,是以我們首先編寫一個嘗試恢複使用者名的try代 碼塊。如果這個檔案不存在,我們就在except 代碼塊中提示使用者輸入使用者名,并将其存儲在username.json中,以便程式再次運作時能夠擷取它。示例如下:

Python新手入門之存儲資料

執行結果:

Python新手入門之存儲資料

1.3 重構

你經常會遇到這樣的情況:代碼能夠正确地運作,但可做進一步的改進—将代碼劃分為一系列完成具體工作的函數。這樣的過程被稱為重構。重構讓代碼更清晰、更易于了解、更容易擴充。 要重構remember_me.py,可将其大部分邏輯放到一個或多個函數中。remember_me.py的重點是問候使用者,是以我們将其所有代碼都放到一個名為greet_user() 的函數中。

要重構remember_me.py,可将其大部分邏輯放到一個或多個函數中。remember_me.py的重點是問候使用者,是以我們将其所有代碼都放到一個名為greet_user() 的函數中。示例如下:

Python新手入門之存儲資料

執行結果:

Python新手入門之存儲資料

考慮到現在使用了一個函數,我們删除了注釋,轉而使用一個文檔字元串來指出程式是做什麼的。這個程式更清晰些,但函數greet_user() 所做的不僅僅是問候使用者,還在存儲了使用者名時擷取它,而在沒有存儲使用者名時提示使用者輸入一個。下面來重構greet_user(),讓它不執行這麼多任務。為此,我們首先将擷取存儲的使用者名的代碼移到另一個函數中:

Python新手入門之存儲資料

執行結果:

Python新手入門之存儲資料

我們還需将greet_user() 中的另一個代碼塊提取出來:将沒有存儲使用者名時提示使用者輸入的代碼放在一個獨立的函數中:

Python新手入門之存儲資料

執行結果:

Python新手入門之存儲資料