❤ day 17-20 -----------------------

❤对象序列化和反序列化

# 热身练习:将100以内的素数输出到一个文件中# 素数判断函数
def is_prime(num: int) -> bool:  '''判断一个正整数是不是质数:param num: 正整数:return: 质数返回True,否则返回False'''for i in range(2, int(num ** 0.5) + 1):  # 需取到num**0.5if num % i == 0:return Falsereturn Truewith open('prime.txt', 'w', encoding='utf-8') as file:for n in range(2, 100):if is_prime(n):# 方法一:print(n, file=file)  # 将结果打印到文件,而不是打印到控制台# 方法二:file.write(str(n))file.write('\n')  # 换行符# 方法三:file.write(f'{n}\n')  # 格式化字符串

1. 将字典和列表写入文件

对象的序列化(serialization)和反序列化(deserialization)

  • 序列化:把一个对象(字典、列表等)变成字符串(str)或者字节串(bytes)

  • 反序列化:从字节串或字符串中还原出一个对象(字典、列表等)

Python的标准库有**json(字符串) / pickle(字节串)**模块,可以支持我们做序列化和反序列化操作

JSON —> JavaScript Object Notation —> JavaScript语言创建对象的字面量语法 (字面量:常数量)

例如:

let person = {name: "骆骆",age: 41,sex: True
}

这种数据格式也非常适合在两个系统(尤其是异构的系统)传输数据(因为它是纯文本),所以今天当我们说到JSON,更多的时候是把它当成一种数据交换格式。

Python中的字典跟JSON格式非常的像,所以我们可以通过将字典转成JSON格式的字符串,就可以写入文件中实现持久化。

文件保存数据的方式:

  • 二进制文件,字节串

  • 文本文件,字符串

json序列化,其他编程语言能读出来

pickle序列化,是python的私有化语言,其他编程语言不能读出来

2 序列化和反序列化

2.1 json模块

Python3 中可以使用 json 模块来对 JSON(文本文件) 数据进行编解码,它包含了两个函数:

  1. 编码序列化 - 把一个对象(字典、列表等)变成字符串(str)或者字节串(bytes))
  • json.dumps(): 对数据进行编码。
  • json.dump(操作对象, fp = 文件对象): 对数据进行编码。

2)解码反序列化 - 从字节串或字符串中还原出一个对象(字典、列表等))