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. ...
随机推荐
- [状态压缩,折半搜索] 2019牛客暑期多校训练营(第九场)Knapsack Cryptosystem
链接:https://ac.nowcoder.com/acm/contest/889/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...
- [模板] trie树 (字典树)
本文基于https://www.cnblogs.com/TheRoadToTheGold/p/6290732.html #include<bits/stdc++.h> using name ...
- java物流查询接口测试代码-快递100
测试代码 返回json格式,xml/html格式自行修改参数 import java.io.IOException; import java.io.InputStream; import java.n ...
- xgboost安装与原理
1.xgboost库的安装 先在网址https://www.lfd.uci.edu/~gohlke/pythonlibs/#xgboost 中下载whl文件,注意一定要下载跟自己当前安装Python版 ...
- Nginx 实现API 网关
1,网关 网关(Gateway)就是一个网络连接到另一个网络的“关口”. 在Nginx 配置负载均衡之后,可以进入到网关,在网关决定进入到哪个真实的web 服务器. 2,将Ngnix 配置 API 网 ...
- Ubuntu复制粘贴快捷键
复制:[Ctrl+Insert] 粘贴:[Shitf+Insert]
- [HOJ2662]Pieces Assignment<状态压缩dp>
描述: 有一个n*m的棋盘(n.m≤80,n*m≤80)要在棋盘上放k(k≤20)个棋子,使得任意两个棋子不相邻(每个棋子最多和周围4个棋子相邻).求合法的方案总数. 输入: 本题有多组测试数据,每组 ...
- phpStorm 激活方式
phpStorm10 激活方式 方法一: 注册时选择License server http://idea.lanyus.com/ 方法二: 用户名:Ly 注册码: \===== L ...
- 老技术新谈,Java应用监控利器JMX(1)
先聊聊最近比较流行的梗,来一次灵魂八问. 配钥匙师傅: 你配吗? 食堂阿姨: 你要饭吗? 算命先生: 你算什么东西? 快递小哥: 你是什么东西? 上海垃圾分拣阿姨: 你是什么垃圾? 滴滴司机: 你搞清 ...
- javascript 3d网页 示例 ( three.js 初探 七)
1 完整代码下载 https://pan.baidu.com/s/1JJyVcP2KqXsd5G6eaYpgHQ 提取码 3fzt (压缩包名: 2020-4-5-demo.zip) 2 图片展示 3 ...