猪行天下之Python基础——10.2 Python常用模块(下)(一)

简介: 内容简述:1、json模块2、pickle模块3、hashlib模块4、base64模块

1、json模块


Json是一种轻量级的数据交换格式,在日常开发中经常需要从Json字符串中提取数据,或者把数据转换为Json字符串,Python中内置了一个json模块来处理Json数据。json模块提供了下述四个函数来完成相互转换:


  • json.load():Json转字典,接受包含json数据的文件对象


  • json.loads():Json转字典,接受json字符串,而非文件对象


  • json.dump():字典转Json,第一个参数为对象字典,第二个参数为文件对象,直接写入文件。


  • json.dumps():字典转Json,第一个参数为对象字典。


dump和dumps还有下述这些常用的可选参数:


  • ensure_ascii:默认True,保证转换后的json全是ascii字符,非ascii字符都会被转义。如果数据中包含中文或非ascii字符,最好将ensure_ascii设置为False,保证输出结果正常。


  • indent:缩进,默认None,没有缩进,设置为正整数,输出格式会按指定的半角空格数缩进。


  • separators:设置分隔符,默认分隔符为(,和:)


  • sort_keys:默认False,输出结果是否按照字典中的key进行排序。


使用代码代码示例如下


import json
json_str = """
{
    "code": "200",
    "data": [
        {
            "create_time": "2小时前",
            "id": 3,
            "title": "对话董明珠:这个时代要倡导利他思想",
            "url": "https://www.thepaper.cn/newsDetail_forward_3131849"
        }
    ],
    "msg": "请求成功"
}
"""
if __name__ == '__main__':
    # Json字符串转字典
    print(json.loads(json_str))
    # 解析一个Json文件转字典
    with open('test.json', 'r+', encoding='UTF-8') as f:
        print(json.load(f))
    origin_dict = {'code': '200', 'data': [{'create_time': '刚刚', 'id': 1, 'title': '字典转Json', 'url': '测试'}],
                   'msg': '请求成功'}
    # 字典转Json打印出来
    print(json.dumps(origin_dict, ensure_ascii=False))
    # 字典转Json写入文件
    with open('result.json', 'w+', encoding='UTF-8') as f:
        json.dump(origin_dict, f, ensure_ascii=False, indent=8)


运行结果如下


# 控制台输出:
{'code': '200', 'data': [{'create_time': '2小时前', 'id': 3, 'title': '对话董明珠:这个时代要倡导利他思想', 'url': 'https://www.thepaper.cn/newsDetail_forward_3131849'}], 'msg': '请求成功'}
{'code': '200', 'data': [{'create_time': '23分钟前', 'id': 4, 'title': '脸书与逾150家公司分享用户数据,美国检方正展开刑事调查', 'url': 'https://www.thepaper.cn/newsDetail_forward_3132840'}], 'msg': '请求成功'}
{"code": "200", "data": [{"create_time": "刚刚", "id": 1, "title": "字典转Json", "url": "测试"}], "msg": "请求成功"}
# 输出的json文件内容:
{
    "code": "200",
    "data": [
        {
            "create_time": "23分钟前",
            "id": 4,
            "title": "脸书与逾150家公司分享用户数据,美国检方正展开刑事调查",
            "url": "https://www.thepaper.cn/newsDetail_forward_3132840"
        }
    ],
    "msg": "请求成功"
}


Python对象与Json对象之间的关系如下表所示


Python Json
dict object
list, tuple array
str string
int, float number
True true
False false
None null


2、pickle模块


pickle模块 是Python提供的用于「对象序列化和反序列化」的模块,存取结构化数据。比如把一个字典保存到文件中,以及读取出来,使用普通的file写入的是字符串,读取的也是字符串。而使用 pickle 的话,写入的是字典,读取出来的,也是字典。跟json模块一样,只有四个函数:


  • dumps():将数据通过特殊的形式转换为只有Python语言认识的字符串。


  • dump():同dumps,并写入文件。


  • loads():将pickle数据转换为Python的数据结构。


  • load():从数据文件读取,并转换为Python的数据结构。


使用pickle模块的一些注意事项


  • pickle除了支持Python中所有的数据类型外,还支持函数,类,以及类的实例


  • load()函数,必须以二进制可读的模式打开,即"rb"dump()函数,则需要以二进制可写的模式打开,即"wb"


使用pickle模块可能出现的异常


  • PickleError:封装和拆封时出现的异常类,继承自Exception。


  • PicklingError: 遇到不可封装的对象时出现的异常,继承自PickleError。


  • UnPicklingError: 拆封对象过程中出现的异常,继承自PickleError。


示例代码如下


import pickle
if __name__ == '__main__':
    test_dict = {'code': '200', 'data': [{'create_time': '2小时前', 'id': 3, 'title': '对话董明珠:这个时代要倡导利他思想',
                                          'url': 'https://www.thepaper.cn/newsDetail_forward_3131849'}], 'msg': '请求成功'}
    # 序列化
    p_str = pickle.dumps(test_dict)
    print("序列化字典:", p_str)
    # 反序列化
    print("反序列化字典:", pickle.loads(p_str))
    # 序列化到文件中
    with open("test.pkl", 'wb') as f:
        pickle.dump(test_dict, f)
    # 从文件中序列化
    with open("test.pkl", 'rb') as f:
        print("从文件中序列化:", pickle.load(f))


目录
打赏
0
0
0
0
7
分享
相关文章
如何在Python中管理模块和包的依赖关系?
在实际开发中,通常会结合多种方法来管理模块和包的依赖关系,以确保项目的顺利进行和可维护性。同时,要及时更新和解决依赖冲突等问题,以保证代码的稳定性和可靠性
167 62
[oeasy]python070_如何导入模块_导入模块的作用_hello_dunder_双下划线
本文介绍了如何在Python中导入模块及其作用,重点讲解了`__hello__`模块的导入与使用。通过`import`命令可以将外部模块引入当前环境,增强代码功能。例如,导入`__hello__`模块后可输出“Hello world!”。此外,还演示了如何使用`help()`和`dir()`函数查询模块信息,并展示了导入多个模块的方法。最后,通过一个实例,介绍了如何利用`jieba`、`WordCloud`和`matplotlib`模块生成词云图。总结来说,模块是封装好的功能部件,能够简化编程任务并提高效率。未来将探讨如何创建自定义模块。
29 8
[oeasy]python071_我可以自己做一个模块吗_自定义模块_引入模块_import_diy
本文介绍了 Python 中模块的导入与自定义模块的创建。首先,我们回忆了模块的概念,即封装好功能的部件,并通过导入 `__hello__` 模块实现了输出 "hello world!" 的功能。接着,尝试创建并编辑自己的模块 `my_file.py`,引入 `time` 模块以获取当前时间,并在其中添加自定义输出。
20 4
|
3月前
|
Python Internet 模块
Python Internet 模块。
139 74
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
150 63
如何在Python中解决模块和包的依赖冲突?
解决模块和包的依赖冲突需要综合运用多种方法,并且需要团队成员的共同努力和协作。通过合理的管理和解决冲突,可以提高项目的稳定性和可扩展性
|
4月前
|
Python的模块和包
总之,模块和包是 Python 编程中非常重要的概念,掌握它们可以帮助我们更好地组织和管理代码,提高开发效率和代码质量
140 61
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。
如何在Python中自动解决模块和包的依赖冲突?
完全自动解决所有依赖冲突可能并不总是可行,特别是在复杂的项目中。有时候仍然需要人工干预和判断。自动解决的方法主要是提供辅助和便捷,但不能完全替代人工的分析和决策😉。
|
2月前
|
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
37 3

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等