pickle\json,configparser,hashlib模块
python常用模块
json模块\pickle模块
首先说一下序列化和反序列化 。
- 序列化:将数据内容转化成一种特定的格式。
- 反序列化:将特定的格式在转化成数据内容。
其实我们之前学过序列化和反序列化的方法,即将内存中的数据转化为字符串的格式存进文件中,在从文件中利用eval()的方法反序列化出来。这也是一种方法,但是现在有更方便的方法。
json模块是个序列化模块,市面上语言的种类有很多,每中语言又有自己独特的结构,当不同语言之间进行数据的交流,就可以采用json模块了,它是将变量内容转化成一种特殊格式,表现出来就是一种字符串,能够被所有的语言使用,在跨平台交流中起着重要的作用。
另外就是如果我们在玩游戏中,要保存自己当前的状态,方便我们下次接着玩的时候,也可以使用序列化将我们的信息暂时存放起来,下次登录的时候再反序列化成当前内容。
根据使用的目的不同,我们可以使用不同的模块,如果我们只是为了存储当前状态的话,那么推荐使用pickle模块,但是如果要是进行跨平台的数据传输的话,那就需要使用json模块了。
如何使用序列化和反序列化呢?
import json
# json序列化
a_json = json.dumps("{1,2,3,4,5}")
# json反序列化
json.loads(a_json)
dumps和loads是相对应的,上述内容只是在内存中进行转化,如果是想要存储的话 ,那么就需要用到下面这种方法 了。
import json
a = {1,2,3,4,5}
# json序列化到文件
with open("a.txt","w",encoding="utf-8") as f:
f.dump(a,f)
# json反序列化文件
with open("a.txt","r",encoding="utf-8") as f:
f.loads(f)
json不需要懂得每种语言独特的结构,它只负责将内容处理成大家都认识的格式,完美的实现了不同语言环境下的数据共享。
pickle则是python自己独有的序列化模块,他的使用方法和json一毛一样,可以参考json的使用方法,一般如果不涉及到跨平台,跨语种的交流数据,推荐使用pickle模块。
小知识:
如果我们在大量的使用了一个模块A之后,突然发现了一个比这个模块更好用的一个模块A+中的功能,不但能实现A中的功能,还更加完美高效。此时我们应该怎么办呢?
当然是选择使用新的,那么问题来了,如果我们使用新功能,那么之前我们使用的总不能挨个去更改吧,这个时候就要用到一种编程思维:猴子补丁。在软件目录规范中,我们都是通过start的文件开始启动整个程序的,如果我们直接在入口处更改这个功能,就可以一劳永逸的解决这个新的问题。
# 使用ujson来替换json中的dump和load。
import json
import ujson
def monkey_patch():
json.dumps = ujson.dumps
json.loads = ujson.loads
monkey_patch()
configparser模块
这个模块的额主要作用就是读取.ini结尾的文件中的特定格式的内容。在文档内容中主要是以sections:options格式来存放的。
# a.ini中的内容
[section1] # 这个相当于分割线,是一个名为section1变量的内容
name="tom"
age=18
[section2]
name="jerry"
age=12
具体类似于section1 = {"name":"tom","age"=18}.但是前者是section后者是option。
import configparser
config = congigparser.ConfigParser()
config.read("a.ini")
# 获取sections
print(config.sections())
# 获取options
print(config.options())
# 取出tom
name = config.get("section1","name")
hashlib模块
hash 是一种算法,该算法将传入内部的值经过一系列复杂的算法得到一段固定长度的值.
- 只要传入内容相同,那么得到的hash值也一样。
- hash值得长度是固定的。
- 不能由值反推出输入的内容。
前两个特性主要用于验证文件的完整性,而第三个则完美的表现了其应用于密码的设定的特性。毕竟我们谁也不想让自己的密码被人家轻易识破。
# hashlib模块的使用。
import hashlib
m = hashlib.md5() # 得到一个工厂。
m.update("123".encode("utf-8"))
m.update("456".encode("utf-8"))
hasd_value = m.hexdigest() # 123456的hash值
”撞库“是一种用来推测密码的方式,通过明文的用户名去推测有可能使用的一些密码,然后用撞大运的方式挨个将这些值通过同样的算法得到hash值然后去测试是否可以通过验证。
为了抵抗这种行为可以用户密码输入的时候,通过'"加盐"'的操作去增加破解难度。即在用户的密码中添加一些额外的东西,然后得到hash值,在数据库中存放的就是这样的hash值。
subprocess模块
这个模块可以根据用户运行命令结果的不同,返回不同的输入。
import subprocess
obj = subprocess.Popen("echo 123;ls/;ls/root",shell=True,
stdout=subprocess.PIPE,
stdeer=subprocess.PIPE,)
# 命令执行成功
msg = obj.stdout.read().decode("GBK")
# 命令执行失败
msg = obj.stdeer.read().decode("GBK")
解码指定的字符编码是系统本身的字符编码。
pickle\json,configparser,hashlib模块的更多相关文章
- python笔记-7(shutil/json/pickle/shelve/xml/configparser/hashlib模块)
一.shutil模块--高级的文件.文件夹.压缩包处理模块 1.通过句柄复制内容 shutil.copyfileobj(f1,f2)对文件的复制(通过句柄fdst/fsrc复制文件内容) 源码: Le ...
- day21 pickle json shelve configpaser 模块
1. 序列化:我们在网络传输的时候,需要我们对对象进行处理,把对象处理成方便存储和传输的格式,这个过程就叫序列化 序列化的方法不一定一样,三十目的都是为了方便储存和传输. 在python中有三种序列化 ...
- python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则
python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess ...
- json/pickle/shelve/xml/configparser/hashlib/subprocess - 总结
序列化:序列化指把内存里的数据类型转成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes为什么要序列化:可以直接把内存数据(eg:10个列表,3个嵌套字典)存到硬盘 ...
- python 全栈开发,Day25(复习,序列化模块json,pickle,shelve,hashlib模块)
一.复习 反射 必须会 必须能看懂 必须知道在哪儿用 hasattr getattr setattr delattr内置方法 必须能看懂 能用尽量用__len__ len(obj)的结果依赖于obj. ...
- Python进阶(九)----json模块, pickle模块, os模块,sys模块,hashlib模块
Python进阶----json模块, pickle模块, os模块,sys模块,hashlib模块 一丶序列化模块 什么是序列化: 将一种数据结构,转换成一个特殊的序列(特殊字符串,用于网络传输 ...
- 模块之 time datetime random json pickle os sys hashlib collections
目录 1. time模块 1.1表示时间的几种方式: 1.2格式化字符串的时间格式 1.3不同格式时间的转换 2.datetim模块 3.random模块 4. json模块 4.1dumps.loa ...
- Python常用模块(logging&re&时间&random&os&sys&shutil&序列化&configparser&&hashlib)
一. logging(日志模块) 二 .re模块 三. 时间模块 四. random模块 五. os模块 六. sys模块 七. shutil模块 八. 序列化模块(json&pickle&a ...
- Python模块 shelve xml configparser hashlib
常用模块1. shelve 一个字典对象模块 自动序列化2.xml 是一个文件格式 写配置文件或数据交换 <a name="hades">123</a>3. ...
随机推荐
- 在一台Linux服务器上安装多个MySQL实例(一)--使用mysqld_multi方式
(一)MySQL多实例概述 实例是进程与内存的一个概述,所谓MySQL多实例,就是在服务器上启动多个相同的MySQL进程,运行在不同的端口(如3306,3307,3308),通过不同的端口对外提供服务 ...
- redis中setbit bitcount命令详解
bitmap,位图,即是使用bit. redis字符串是一个字节序列. 1 Byte = 8 bit SETBIT key offset value 设置或者清空key的value(字符串)在offs ...
- 快速排序-无序数组K小元素
13:07:382020-03-10 11:16:13 问题描述: 找到一个无序数组中第K小的数 样例 1: 输入: [3, 4, 1, 2, 5], k = 3 输出: 3 样例 2: 输入: [1 ...
- Codeforces Round #567 (Div. 2) B. Split a Number
Split a Number time limit per test 2 seconds memory limit per test 512 megabytes input standard inpu ...
- openfire广播broadcast插件怎么发送消息给所有用户(包括在线和离线)
openfire广播broadcast插件怎么发送消息给所有用户(包括在线和离线): 打开openfire管理界面,找到服务器系统属性,添加一个属性(属性名:plugin.broadcast.all2 ...
- List<Object>转List<T>
今天遇到一个麻烦,公司有个项目用了一个封装dao的模板,他妈的不管是查一条数据的方法,还是查一个集合数据的方法,全都返回Object或List<Object> 由于对象是Object根本不 ...
- 3.介绍ASP.NET Core框架
介绍ASP.NET Core框架 在这篇文章中,我将要向你们简短介绍一下ASP.NET Core 框架.当今社会,当提到软件开发,每个人都是讨论着开源以及跨平台开发.总所周知,微软是以它的基于Wind ...
- 在linux虚拟机上安装docker并安装mysql
步骤 1.检查内核版本,必须是3.10及以上 uname -r 2.安装docker yum install docker 3.输入y确认安装 4.启动docker systemctl start d ...
- 发现钉钉打卡定位算法的一个bug
最近公司取消了指纹打卡,改用钉钉打卡. 天天用这个打卡上班,经常忘记,困扰. 最烦的是好几次明明人在办公室,打卡地址显示在10分钟前的位置,定位失败,不得不重新打卡. 经历过几次定位失败后,我就琢磨起 ...
- Face The Right Way POJ - 3276(区间)
Farmer John has arranged his N (1 ≤ N ≤ 5,000) cows in a row and many of them are facing forward, li ...