
python-常用模块
使用 Python 的
输入相同时,哈希值必然相同。 哈希值不可逆。 固定算法决定固定长度。
发布日期:2021-05-10 08:55:31
浏览次数:20
分类:精选文章
本文共 3099 字,大约阅读时间需要 10 分钟。
序列化与反序列化技术文档
序列化与反序列化的理解
序列化是将内存中的数据类型转换为特定格式的内容,这种格式通常用于存储或传输。这种格式能够被其他平台识别和使用。反序列化则是将这些特定格式的内容转换回内存中的原始数据类型。
例如:
{'aaa': 111} --- 序列化 str({'aaa': 111}) --- "{'aaa': 111}"{'aaa': 111} <--- 反序列化 eval("{'aaa': 111}") <--- "{'aaa': 111}"
为何要进行序列化
序列化的结果可以用于存储或跨平台传输,提供了以下优势:
指定格式的内容:
- 专用格式(如
pickle
只能在 Python 中使用) - 通用格式(如
json
可以被所有语言识别)
两大用途:
- 存档
- 跨平台数据交互
序列化与反序列化的实现
使用 Python 的 json
模块
序列化示例
import json# 序列化内容json_res = json.dumps([1, 'aaa', True, False])
反序列化示例
l = json.loads(json_res)
文件操作示例
序列化文件
import jsonwith open('test.json', 'wt', encoding='utf-8') as f: json.dump([1, 'aaa', True, False], f)
读取文件反序列化
with open('test.json', 'rt', encoding='utf-8') as f: json_res = f.read() l = json.loads(json_res)
示例:简单文件操作
序列化
with open('test.json', 'wt', encoding='utf-8') as f: json.dump([1, 'aaa', True, False], f)
反序列化
with open('test.json', 'rt', encoding='utf-8') as f: l = json.load(f) print(l, type(l))
注意事项
- Python版本差异:在 Python 2.7 和 3.6 及以上版本中,
json.loads
可以处理 bytes 类型,但 3.5 不支持。 - 自定义 JSON 格式:
res = json.dumps({'name': '哈哈哈'})print(res, type(res))res = json.loads(b'{"name": "\u54c8\u54c8\u54c8"}')print(res, type(res))
猴子补丁(Monkey Patching)
概念
猴子补丁是通过动态替换运行时模块的源代码实现的属性替换。其核心在于替换模块的方法或属性。
示例
import jsonimport ujsondef monkey_patch_json(): json.__name__ = 'ujson' json.dumps = ujson.dumps json.loads = ujson.loads# 在入口文件处运行 monkey_patch_json()
注意事项
安装 ujson:
pip3 install ujson
Pickle 模块
示例
序列化示例
import pickleres = pickle.dumps({1, 2, 3, 4, 5})print(res, type(res))
反序列化示例
s = pickle.loads(res)print(s, type(s))
Pickle 的兼容性问题
在 Python 3 中,pickle.dump
默认使用协议版本 4。为了与 Python 2 兼容,可设置 protocol=2
。
ConfigParser 模块
示例
test.ini 文件内容
# 注释1# 注释2[section1]k1 = v1k2: v2user: egonage: 18is_admin: truesalary: 31[section2]k1 = v1
加载配置文件
import configparserconfig = configparser.ConfigParser()config.read('test.ini')print(config.sections()) # 获取所有 sectionprint(config.options('section1')) # 获取 section1 下的所有选项print(config.items('section1')) # 获取 section1 下的所有键值对res = config.getint('section1', 'age')print(res, type(res))res = config.getboolean('section1', 'is_admin')print(res, type(res))res = config.getfloat('section1', 'salary')print(res, type(res))
Hashlib 模块
哈希算法的定义
哈希算法是一种将输入内容转换为固定长度的 hash 值的算法。其特点包括:
示例
MD5 计算
import hashlibm = hashlib.md5()m.update('hello'.encode('utf-8'))m.update('world'.encode('utf-8'))res = m.hexdigest()print(res)
分步哈希示例
m1 = hashlib.md5('he'.encode('utf-8'))m1.update('llo'.encode('utf-8'))m1.update('w'.encode('utf-8'))m1.update('orld'.encode('utf-8'))res = m1.hexdigest()print(res)
密码加盐
import hashlibm = hashlib.md5()m.update('天王'.encode('utf-8'))m.update('alex3714'.encode('utf-8'))m.update('盖地虎'.encode('utf-8'))print(m.hexdigest())
Subprocess 模块
示例
运行外部命令
import subprocessobj = subprocess.Popen('dir d:\\', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)res = obj.stdout.read()print(res.decode('gbk'))
以上是对序列化和反序列化技术的全面介绍,涵盖了 json
、pickle
、configparser
、hashlib
、subprocess
等多个模块的应用示例。
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月28日 13时21分01秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
2024最新程序员接活儿搞钱平台盘点
2023-01-24
2024最火专业解读:信息安全(非常详细)零基础入门到精通,收藏这一篇就够了
2023-01-24
2025最新大模型技术学习过程梳理,零基础入门到精通,收藏这篇就够了
2023-01-25
2025版最新0基础怎么转行网络安全?零基础入门到精通,收藏这篇就够了
2023-01-25
2025版最新Bash Shell入门指南,零基础入门到精通,收藏这篇就够了
2023-01-25
2025版最新C++快速入门(适合小白)零基础入门到精通,收藏这篇就够了
2023-01-25
2025版最新关于HW护网行动的一些知识,零基础入门到精通,收藏这篇就够了
2023-01-25
2025版最新大模型学习路线,零基础入门到精通,收藏这篇就够了
2023-01-25
2025版最新大模型开发流程(非常详细)零基础入门到精通,收藏这一篇就够了
2023-01-25
2025版最新大模型微调方法(非常详细)零基础入门到精通,收藏这篇就够了
2023-01-25
2025版最新大语言模型的指令微调,零基础入门到精通,收藏这篇就够了
2023-01-25
2025版最新小白学习大模型:什么是大模型?零基础入门到精通,收藏这篇就够了
2023-01-25
2025版最新常用黑客工具之【Nmap 教程基础】零基础入门到精通,收藏这篇就够了
2023-01-25
2025版最新渗透测试和黑客工具列表,零基础入门到精通,收藏这一篇就够了
2023-01-25
2025版最新网络安全等级保护测评指南,零基础入门到精通,收藏这篇就够了
2023-01-25
2025版最新运维怎么转行网络安全?零基础入门到精通,收藏这篇就够了
2023-01-25
2025版最新黑客学习网站(非常详细),零基础入门到精通,看这一篇就够了
2023-01-25
2025版网络工程11个高含金量证书(非常详细)零基础入门到精通,收藏这篇就够了
2023-01-25
2025自学成为黑客必读的5本书籍,带你从小白进阶成大佬
2023-01-25