一、json
1、数据的存储:文件
- 数据库:内容均是文本形式或者是二进制形式
- json一种将程序中的数据与文件中的数据进行转换的技术。
- 序列化:将对象(字典、列表)转字符串。
- 反序列化:将字符串转对象(字典、列表)。
二、open
1、模式
- t 文本
- b 二进制
- r 只读
- w 只写
- rb rt
- wb wt
- a 追加
- w+ 可读写 不存在就创建
- r+ 可读写 不存在就报错
- a+ 可读写 不存在就创建
三、实战
1、使用json对学生信息进行添加,并保存在data.txt文件中。
import os
result = {
"students": [],
"class": [],
"score": [],
"user": []
}
def read_data():
if os.path.exists('data.txt'):
with open('data.txt', 'r') as f:
global result
result = json.load(f)
read_data()
def save_date():
global result
result["students"].append({
"id": result["students"][-1]["id"] + 1 if result["students"] else 101,
"name": input("输入用户名:")
})
with open("data.txt", "w") as f:
json.dump(result, f)
2、将JSON格式的内容写入文件,增加新内容,并将新内容写入文件[注意开始写入前要将字符串的内容转换成JSON的形式]。
# s0 = '[{"id": 101, "name": "张三", "age": 20, "sex": "男"},{"id": 102, "name": "小红", "age": 23, "sex": "女"}]
#
#
#
# 将字符串反序列化
# obj = json.loads(s0)
# print(type(obj), obj[0]["name"])
# 将反序列化的内容写入文件
# with open("data.txt", "w", encoding="utf8") as f:
# json.dump(obj, f)
# 读文件【注意汉字用UTF-8的解码方式】
with open("data.txt", "r+", encoding="utf8") as f:
# 整体思路:先读,向列表中添加一个字典,再写入
# 方法一:
# content = f.read()
# obj = json.loads(content)
# 方法二:
obj = json.load(f)
# print(type(obj), obj[0]["name"])
# 结果:<class 'list'> 张三
# 添加时可以先使用后把变量名换上,即:先[].append完成后,再改为obj.append
# 添加时是在原来的基础上添加的,可以用seek()每次从第一个开始,覆盖原来的内容,即:将指针放在开头
f.seek(0)
obj.append({
"id": obj[-1]["id"] + 1 if obj else 101,
"name": input("请输入:")
})
3、将每天学习的内容保存在记事本中。
# 第一遍执行完后,只保留open方法下的r+,即可保留原来内容继续添加
s0 = '[{"my_date": 22, "事件": "闭包与装饰器"},{"my_date": 23, "事件": "JSON"}]'
obj = json.loads(s0)
path = "记事本.txt"
with open(path, "w", encoding="utf8") as f:
json.dump(obj, f)
with open(path, "r+", encoding="utf8") as f:
obj = json.load(f)
f.seek(0)
obj.append({"my_date": obj[-1]["my_date"] + 1 if obj else 22,
"事件": input("请输入学习内容:"),
})
json.dump(obj, f, ensure_ascii=False)
四。pickle的使用
1、Pickle是Python独有的 序列化与反序列化只能通过Python, 用法完全类似json。
2、pickle:序列化会转化为字节流,写时用mode = "wb"模式;读时用mode = "rb"模式。
3、实战
(1)、使用pickle,将字符串写入文件并读出。
l0 = [{"id": 101, "name": "张飞"}]
with open("pickle.txt", "wb") as f:
# # 方法一:
s = pickle.dumps(l0)
f.write(s)
# # 方法二:
# pickle.dump(l0, f)
# dump():是将转改为字符串与写入功能合并。【相当于dumps()与write()功能】
with open("pickle.txt", "rb") as f:
# 方法一:
# content = f.read()
# obj = pickle.loads(content)
# 方法二:
obj = pickle.load(f)
print(obj)
# load():是将读功能与转化为JSON格式合并。【相当于read()与loads()】