Python中open与json、pickle的使用

本文介绍了如何使用Python的json模块进行数据的序列化与反序列化,以及open函数的文件操作模式,并通过实例展示了如何在文件中添加、读取和更新JSON格式的数据,同时提到了Pickle模块的序列化与反序列化功能。
摘要由CSDN通过智能技术生成

一、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()】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值