序列化与反序列化
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的序列化和反序列化操作,以实现数据的转换和交互。
- 编写一个程序,将一个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'}
- 编写一个函数
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
- 编写一个函数
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'}
- 编写一个程序,将一个自定义类的对象序列化为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
- 将一个包含嵌套结构(如列表、字典)的复杂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]}
- 编写一个程序,使用
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}}