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. ...
随机推荐
- Oracle连接别人数据库
方法一:在开始菜单中,找到oracle11g-应用程序开发-SQL PLUS.双击SQL PLUS. 弹出的SQL Plus框中,输入数据库实例的用户名和密码,按enter键. 如果oracle服务器 ...
- [Docker7]Harbor
harbor download harbor offline tar package wget https://github.com/vmware/harbor/releases/download/v ...
- python-pathlib
2019-12-12 04:27:17 我们知道在不同的操作系统中文件路径的组成方式是不同的,因此在python中关于路径的问题以往我们通常采用os.path.join来进行路径的字符串级别的串联,通 ...
- Node/Python 工具搭建cmder和nrm
一.安装cmder cmder是windows下的一款终端工具,支持很多linux命令,用起来还是很爽的. 1.安装 http://cmder.net/ 直接在官网下载,解压即可. 2.cmder配置 ...
- 大型Java进阶专题(五) 设计模式之单例模式与原型模式
前言 今天开始我们专题的第四课了,最近公司项目忙,没时间写,今天抽空继续.上篇文章对工厂模式进行了详细的讲解,想必大家对设计模式合理运用的好处深有感触.本章节将介绍:单例模式与原型模式.本章节参考 ...
- 【SQL SERVER重新认识】数据内部存储结构简单探索
数据库经常需要打交道,但是从来没想过数据库内部是如何存储数据. 今天探索一下数据库内部如何存储数据,从下面几个方面探索 数据库内部如何存储数据 索引数据如何存储 操作数据对存储影响 总结 数据库内部如 ...
- 什么是CPU load
最近经常收到告警,CPU load大于阈值告警.查看系统的CPU是12核,告警阈值设置的是8.对于CPU load一直有个模糊的概念,具体是什么意思还真搞不明白,趁这个机会好好搞搞究竟. 1.查看CP ...
- python中的函数及作用域的理解
内置函数 常用的几个内置函数 function des len 求长度 min 求最小值 max 求最大值 sorted 排序 reversed 反向 sum 求和 进制转换函数 function d ...
- RabbitMQ AMQP 事务机制
1,在之前的文章中介绍了RabbitMQ的五种队列形式 其中,在工作队列中,为了保证消费者的公平性,采用了channel.basicQos(1),保证了每次只发一条消息给消费者消费,并且使用手动签收的 ...
- Spring事物传播行为
Spring事物传播行为 Spring中事务的定义: Propagation(key属性确定代理应该给哪个方法增加事务行为.这样的属性最重要的部份是传播行为.)有以下选项可供使用: PROPAGATI ...