python中的JSON(1)
很多程序都要求用戶輸入某種信息,
例如:
讓用戶存儲遊戲首選項或提供要可視化的數據,程序把用戶的信息存儲在列表和字典等數據結構中,
用戶關閉程序時,我們幾乎總要保存他們提供的信息;
如何保存——
一種簡單的方式是使用模塊json來存儲數據。
JSON(JavaScript Object Notation)
模塊json讓我們能夠將簡單的python數據結構轉儲到文件中,並在程序再次運行時加載該文件中的數據。
不僅如此,JSON還可以讓我們在python程序之間分享數據,更重要的是JSON數據格式並非Python專用的,
JSON格式的數據可以與其他程序員使用其他腳本存儲的方式互通。
json.dump() 保存文件
範例:
#!/usr/bin/env python
#filename = wr_num.py
import json
numbers = [1,2,3,4,5,6,7]
file_name = ‘numbers.json‘ ①
with open(file_name, ‘w‘) as f_obj: ②
json.dump(numbers , f_obj) ③
這段代碼塊中,首先導入了模塊json,然後配置了一個list
在 ① 處,指定了這個要將這個列表存儲的文件名:number.json
在 ② 處,通過w的方式打開文件,
在 ③ 處,通過函數json.dump()將數字列表存儲到文件中
效果:
[[email protected] Alben-PY]# ./wr_num.py
[[email protected] Alben-PY]# more numbers.json
[1, 2, 3, 4, 5, 6, 7]
json.load() 讀取文件
#!/usr/bin/env python
#filename = rd_num.py
import json
"""導入模塊JSON"""
file = ‘numbers.json‘
"""定義文件"""
with open(file) as f_obj:
"""打開文件"""
numbers = json.load(f_obj)
#使用函數json.load()讀取文件內容,並保存為變量 numbers
print(numbers)
效果:
[[email protected] Alben-PY]# ./rd_num.py
[1, 2, 3, 4, 5, 6, 7]
[[email protected] Alben-PY]#
小測試:
編寫一個腳本,含如下功能
用戶首次打開,提示輸入名字,並告知用戶該程序有記憶功能,下次打開可以直接問好。
代碼:
#!/usr/bin/env python
import json
file = ‘greet_name.json‘
#定義存儲名字的文件名
try:
with open(file) as f_obj:
username = json.load(f_obj)
except FileNotFoundError:
#如果文件不存在,默認會有一個TraceBack:FileNotFoundError#
#使用except後可以取消TraceBack,同時允許except中的代碼塊#
username = input("What is your name? \n:")
with open(file ,‘w‘) as f_obj:
json.dump(username,f_obj)
print("We‘ll remember you when you come back, " + username + ‘!‘)
#這個代碼塊中就是與用戶進行交互,要求輸入名字
else:
print("Welcome back, " + username +‘!‘)
#如果文件能夠順利打開,並且json.load()函數能夠讀取內容,則運行這段print#
效果如下:
[[email protected] Alben-PY]# ./rem_name.py
What is your name?
:alben
We‘ll remember you when you come back, alben!
[[email protected] Alben-PY]# ./rem_name.py
Welcome back, alben!
[[email protected] Alben-PY]#
可以看到,第一次運行的時候,會提示輸入名字,
而第二次運行就直接welcome back了。這是因為第一次運行後生成了文件 greet_name.json
[[email protected] Alben-PY]# ll greet*
-rw-r--r--. 1 root root 7 May 15 08:01 greet_name.json
python中的JSON(1)