MyPython-->進階篇-->存儲數據json


存儲數據

程序要將用戶提供的信息儲存在列表和字典等數據結構中。用戶關閉程序時,你幾乎總是要保存他們的信息 一種簡單的方式是使用模塊json來存儲數據

模塊json能將簡單的python數據結構轉儲到文件中,並在程序再次運行時加載該文件中的數據。還可以使用json在python程序之間分享數據,更重要的是,json數據格式並非python專用,這讓你能夠將以json格式儲存的數據與其他編程語言的人分享。

Json 格式最初是由JavaScript開發的,但隨后成了一種常見的格式

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

我們來編寫一個存儲一組數字的簡短程序,再編寫一個將這些數字讀取到內存中的程序,第一個程序使用json.dump()來儲存這組數字,第二個程序將使用json.load()

函數json.dump()接受兩個實參:要儲存的數據以及可以用於存儲數據的文件對象。下面是演示

import json
number = [1,2,3,5]
file_name = 'number.json' #通過擴展名指紋文件存儲的數據為json格式
with open(file_name,'w') as file_object:
    json.dump(number,file_object)

我們先導入json模塊,再創建一個是數字列表,我們指定存放在number.json里,文件后綴是.json來指出文件存儲的數據是json格式,我們再以寫入模式打開文件,讓json能見數據寫入其中使用json.dup()將數據寫入,我們沒有寫輸出語句,打開這個文件查看,數據存儲的格式與python一樣

注意json.dump()方法,傳遞兩個參數 第一個要寫入的,第二個要存儲的位置

再寫一個程序,使用json.load()讀取到內存中

with open(filename,'r') as file_object:
    contents = json.load(file_object)
print(contents)

這是在程序間共享數據的簡單方式

保存和讀取用戶生成的數據

對於用戶輸入的數據,用json來保存大有裨益,因為如果不以某種方式進行存儲,等程序停止運行時用戶的信息將丟失。 看一個例子

用戶首次運行程序時被提示輸入自己的名字,再次運行程序時就記住他了

我們先儲存名字

ipt = input('enter your name')
filename1 = 'name.json'
with open(filename1,'w') as file_object:
    json.dump(ipt, file_object)

再讀取之前存儲的名字

with open(filename1,'r') as file_object:
    name_ipt = json.load(file_object)
print('wleccome %s'%name_ipt)

我們將這兩個程序合並到一個內,在執行的時候先去name.json嘗試獲得用戶名,如果沒有這文件,用try-except處理這個錯誤,並入用戶輸入名字並保存到name.json中

filename1 = 'name.json'
try:
    with open(filename1)as file_object:
        username = json.load(file_object)
except FileNotFoundError:
    with open(filename1,'w') as file_object2:
        user_ipt = input('enter your name i will rember you')
        json.dump(user_ipt,file_object2)
else:
    print(username)

重構

我們經常遇到代碼能運行,但可以進一步的改進 將代碼划分為一些類完成具體工作的函數,這樣的過程稱為重構。  重構讓代碼更清晰更容易理解更容易擴展。

以上代碼主要功能是問候用戶,我們把所有的代碼放到名為greet_user()函數中

def greet_user():
    '''問候用戶 並指出其名字'''
    filename1 = 'name.json'
    try:
        with open(filename1)as file_object:
            username = json.load(file_object)
    except FileNotFoundError:
        with open(filename1,'w') as file_object2:
            user_ipt = input('enter your name i will rember you')
            json.dump(user_ipt,file_object2)
    else:
        print(username)
        

但是greet_user()不僅問候了用戶,還在儲存了用戶名時獲取他,沒有的時候提示用戶輸入一個,我們將對greet_user()函數重構,讓存儲用戶名的代碼轉移到另一個函數

def get_savename(filename):
    '''將獲取用戶名沒有返回none'''
    try:
        with open(filename) as file_object:
            sname = json.load(file_object)
            return sname
    except FileNotFoundError:
        return None
def get_newname(filename):
    '''沒有的時候提示玩家輸入並存儲'''
    with open(filename,'w') as file_object:
        newname = input('enter you name i will rember you')
        json.dump(newname,file_object)
        return newname
def geet_username(filename):
    '''主函數 如果name有讀取,如果沒有輸入'''
    user_name =get_savename(filename)
    if user_name:
        print(user_name)
    else:
        newname = get_newname(filename)
        print(newname)
geet_username('name.json')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM