【python】序列化与反序列化

序列化与反序列化

JSON、CSV和YAML都是常见的数据序列化和反序列化格式。它们都可以用于将数据从一种表示形式转换为另一种表示形式。

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它使用键值对的形式来表示数据,常用于Web应用程序之间的数据交互。JSON格式的数据可以通过JSON序列化和反序列化来转换为其他编程语言中的对象。

CSV(Comma-Separated Values)是一种简单的文本文件格式,它使用逗号作为字段分隔符,每行表示一个数据记录。CSV格式的数据可以通过CSV序列化和反序列化来转换为其他编程语言中的对象。

YAML(YAML Ain’t Markup Language)是一种可读性高的数据序列化格式,它使用缩进和冒号来表示数据的层次结构。YAML格式的数据可以通过YAML序列化和反序列化来转换为其他编程语言中的对象。

在Python中,可以使用相关的库来进行序列化和反序列化操作。常见的库有:

  • JSON序列化和反序列化:可以使用json库,其中的json.dumps()函数用于将对象转换为JSON格式的字符串,json.loads()函数用于将JSON格式的字符串转换为对象。
  • CSV序列化和反序列化:可以使用csv库,其中的csv.writer()函数用于将对象写入CSV文件,csv.reader()函数用于从CSV文件中读取对象。
  • YAML序列化和反序列化:可以使用pyyaml库,其中的yaml.dump()函数用于将对象转换为YAML格式的字符串,yaml.load()函数用于将YAML格式的字符串转换为对象。

通过这些库,可以方便地进行JSON、CSV和YAML的序列化和反序列化操作,以实现数据的转换和交互。

  1. 编写一个程序,将一个Python字典序列化为JSON字符串,并将该字符串保存到文件中,然后从文件中读取JSON字符串并反序列化为Python字典。
import json
with open("test1.txt","w") as f:
    d1 = {"name":"xcz","age":18,"sex":"male"}
    res = json.dump(d1,f)
with open("test1.txt","r") as f:
    d2 = json.load(f)
    print(d2)
{'name': 'xcz', 'age': 18, 'sex': 'male'}
  1. 编写一个函数save_to_json,接受一个Python对象和一个文件名作为参数,将该对象序列化为JSON格式并保存到文件中。
import json
def save_to_json(data, filename):
    with open(filename, 'w') as f:
        json.dump(data, f)
        print(f"Data saved to {filename}")


dic1 = {1: "a", 2: "b", 3: "c"} # Dictionary
save_to_json(dic1, "dic1.json")
Data saved to dic1.json
  1. 编写一个函数load_from_json,接受一个文件名作为参数,从该文件中读取JSON字符串并反序列化为Python数据。
def load_from_json(filename):
    with open(filename, 'r') as f:
        return json.load(f)


load_from_json('dic1.json')
{'1': 'a', '2': 'b', '3': 'c'}
  1. 编写一个程序,将一个自定义类的对象序列化为JSON字符串,然后将其反序列化为对象。注意自定义类需要实现__dict____init__方法。
import json


class ABC:
    def __init__(self, a, b):
        self.a = a
        self.b = b



a1 = ABC(1, 2)
res = json.dumps(a1.__dict__)
print(res)
a2 = json.loads(res, object_hook=lambda d: ABC(**d))
print(a2.a)
print(a2.b)
{"a": 1, "b": 2}
1
2
  1. 将一个包含嵌套结构(如列表、字典)的复杂Python字典序列化为JSON字符串,然后将其反序列化为原始数据。
my_dict = {'name': 'xcz', 'age': 20, 'score': [100, 90, 80]}
res = json.dumps(my_dict)
print(res)
my_dict2 = json.loads(res)
print(my_dict2)
{"name": "xcz", "age": 20, "score": [100, 90, 80]}
{'name': 'xcz', 'age': 20, 'score': [100, 90, 80]}
  1. 编写一个程序,使用yaml模块将一个Python字典序列化为YAML格式字符串,并将其保存到文件中,然后从文件中读取YAML字符串并反序列化为Python字典。
import yaml

my_dict = {
    "name": "xcz",
    "age": 20,
    "score": {"chinese": 100, "english": 90, "math": 80},
}
with open("my_dict.yaml", "w") as f:
    yaml.safe_dump(my_dict, f, default_flow_style=False)
with open("my_dict.yaml", "r") as f:
    my_dict_re = yaml.safe_load(f)
    print(my_dict_re)
{'age': 20, 'name': 'xcz', 'score': {'chinese': 100, 'english': 90, 'math': 80}}
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值