本以为今天上周六课表,结果,今天串休还上周二课?上一个周二周一周二仿佛就发生在昨天:)
不过没关系!就算上午有两堂课也不要怕!
因为下午和晚上也有
所以如果晚上之前码不完字的话就没机会了,gkdgkd
在昨天的基本文件格式中,我们知道,基本格式的文件会把需要存储的信息以字符串形式保存并且会堆到一起,可这样的信息会给其他操作者带来很大的不变,为了避免这个问题,我们今天就来介绍一种比较通用的格式——JSON格式文件
JSON格式
“JSON格式是一种轻量级的数据交换格式,最初被用于JavaScript,后来被推广为不同程序之间数据共享的一种技术标准。我们把Python需要保存的数据转化为JSON格式的过程叫做‘序列化’,反之则为反序列化。”
对我而言,JSON、XML等格式就好比不同的通信协议,普通的堆在一起的数据文件则是串口通信。虽然都能达到通信的目的,但是他们的效率与适用场景各不相同,我们操作者根据需要选择即可。
常用的两种数据类型
- 第一种:键-值对,在不同的语言中它又对应着不同的概念,而在Python中,则是字典
- 第二种:值的有序列表,在其他语言中,它常对应着“数组”,而在Python中,对应着列表、元组。
这两种数据结构在很多语言中都有对应的某种形式,因此使得JSON格式在不同语言之间的交换成为可能
Python与JSON格式的序列化与反序列化
json模块
Python自带json模块,便于我们将数据序列化:
>>> import json
以字典为例:
- 把数据转为JSON模式
>>> D = {'K':17,'S':18,'Y':19}
>>> D
{'K': 17, 'S': 18, 'Y': 19}
>>> J1 = json.dumps(D)
>>> J1
'{"K": 17, "S": 18, "Y": 19}'
- 再把JSON格式转化为Python的数据:
>>> d = json.loads(J1)
>>> d
{'K': 17, 'S': 18, 'Y': 19}
我们发现,转为JSON后,字典里的单引号变成了双引号,再转回来时又成了单引号。并且JSON的数据两边都有单引号,这是因为JSON数据是以字符串形式表示的。
读写JSON格式文件
dump
dump函数的格式为:dump(obj, f,ensure_ascii=True/False)
- obj:数据对象
- f:文件名
- ensure_ascii:ensure_ascii = True时,只允许接收ASCII表的数据类型,当其为False时,可以接受中文
load
最直接的用法就是load(文件名),其意思也很好理解,读取数据
实例:保存字典
我们现在要把字典:{‘K’: 17, ‘S’: 18, ‘Y’: “十九”}以JSON格式保存到文件里,再读取文件的内容,并分别自定义写和读函数完成以上操作:
首先我们导入json模块
import json
写函数
- 昨天我们强调过,打开文件操作完后要关闭/doge,所以我们先把这个部分写好
- 返回flag值,用于在主函数中判断是否写入成功
def w_JSON():
flag = False
try:正常操作:把数据写入文件中
except:异常
finally:
if flag:关闭文件
return flag
- 输入参数:
- 一,文件名:file,可带路径与扩展名。
- 二,输入的对象:D,若其不是字典,则返回“flag = False”
def w_JSON(file,D):
flag = False
if type(D)!=dict:
print('输入对象必须为字典!')
return flag
try:正常操作:把数据写入文件中
except:异常
finally:
if flag:关闭文件
return flag
- 对文件的操作:打开文件,把字典转为JSON格式并写入文件
try:
file_J = open(file,'w')
json.dump(D,file_J,ensure_ascii=False)
flag = True
except:
print('%s文件写JSON数据出错!'%(file))
finally:
if flag:
file_J.close()
那么写函数就写完了/doge
读函数
- 同样是,先把关闭文件与异常处理写上
- 返回字典D
def r_JSON():
flag = False
D = {}
try:正常操作:把数据读到“D”中
except:异常
finally:
if flag:关闭文件
return D
- 输入参数:文件名
def r_JSON(file):
- 对文件的操作:把数据读到“D”中
try:
file_J = open(file,'r')
D = json.load(file_J)
flag = True
except:
print('%s文件读JSON数据出错!'%(file))
finally:
if flag:
file_J.close()
读函数到此也写完了
主函数
D_test = {'K': 17, 'S': 18, 'Y': "十九"} #要写入的字典
file_test = r'f:\Python_Le\new2.json' #新文件名及路径
W = w_JSON(file_test,D_test) #把字典写入文件
if W:
print('保存成功')
else:
print('Error') #这里print('error')其实没有什么左右
#也不会对错误保存作出反馈,这里可以改为延时2秒后关闭程序
D_Out = r_JSON(file_test) #把字典读出来
print(D_Out)
然后再F5执行一下:
这个系列已经更新到了第23期,在原计划中,文件正是这个Python基础系列的最终部分。今天向各位介绍了JSON格式,明天再把XML格式的文件说完以后,算上第0期,这个Python学习正好更新了25期,还好凑了个比较整的数23333333
…
至于以后,像是多线程、数据库。web等问题会陆续写到,不过标题不再是第n天学Python了:)
————————
我是康,希望做一名能帮助到各位的博主!在Python系列更新完后,会根据时间安排再开机器学习或者算法系列,欢迎感兴趣的小伙伴与我共同学习,一起进步!