pickle\json,configparser,hashlib模块

python常用模块

目录

  • python常用模块

    • json模块\pickle模块
    • configparser模块
    • hashlib模块
    • subprocess模块

json模块\pickle模块

首先说一下序列化和反序列化 。

  1. 序列化:将数据内容转化成一种特定的格式。
  2. 反序列化:将特定的格式在转化成数据内容。

其实我们之前学过序列化和反序列化的方法,即将内存中的数据转化为字符串的格式存进文件中,在从文件中利用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 是一种算法,该算法将传入内部的值经过一系列复杂的算法得到一段固定长度的值.

  1. 只要传入内容相同,那么得到的hash值也一样。
  2. hash值得长度是固定的。
  3. 不能由值反推出输入的内容。

前两个特性主要用于验证文件的完整性,而第三个则完美的表现了其应用于密码的设定的特性。毕竟我们谁也不想让自己的密码被人家轻易识破。

# 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")

解码指定的字符编码是系统本身的字符编码。

原文地址:https://www.cnblogs.com/liqianxin/p/12606971.html

时间: 2024-10-08 23:24:20

pickle\json,configparser,hashlib模块的相关文章

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 logging re正则 转自老男孩老师Yuan:http://www.cnblogs.com/yuanchenqi/articles/5732581.html 模块&包(* * * * *) 模块(modue)的概念: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,

8.模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configparser hashlib subprocess logging模块 re正则表达式

本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configparser hashlib subprocess logging模块 re正则表达式 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.p

Python学习第十三天 time datetime random os sysshutil json pickle shelve xml configparser hashlib suprocess logging re

https://www.cnblogs.com/yuanchenqi/articles/5732581.html https://www.cnblogs.com/linhaifeng/articles/6384466.html#_label2 一 time与datetime模块 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行“type(time.time())”,返回的是fl

25.Python序列化模块,hashlib模块, configparser模块,logging模块,异常处理

一.序列化模块 什么叫序列化——将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. 比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给?现在我们能想到的方法就是存在文件里,然后另一个python程序再从文件里读出来.但是我们都知道,对于文件来说是没有字典这个概念的,所以我们只能将数据转换成字典放到文件中.你一定会问,将字典转换成一个字符串很简单,就是str(dic)就可以办到了,为什么我们还要学习序列化模块呢?没错序列化的过程就是从dic 变成str(di

python_day06 常用模块xml/configparser/hashlib/subprocess 面向对象程序设计

常用模块shutilxmlconfigparserhashlibsuprocess面向对象的程序设计 常用模块 xml模块 1 <?xml version="1.0"?> 2 <data> 3 <country name="Liechtenstein"> 4 <rank updated="yes">2</rank> 5 <year>2008</year> 6 &l

处理xml模块、configparser模块、hashlib模块、subprocess模块

xml模块 新建a.xml内容为: <data> <country name="Liechtenstein"> <rank updated="yes">2</rank> <year updated="yes" version="1.0">2009</year> <gdppc>141100</gdppc> <neighbor d

hashlib,configparser,logging模块

一.常用模块二 hashlib模块 hashlib提供了常见的摘要算法,如md5和sha1等等. 那么什么是摘要算法呢?摘要算法又称为哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示). 注意:摘要算法不是一个解密算法.(摘要算法,检测一个字符串是否发生了变化) 应涂:1.做文件校验 2.登录密码 密码不能解密,但可以撞库,用'加盐'的方法就可以解决撞库的问题.所有以后设置密码的时候要设置的复杂一点. 1 import hashlib 2

2018-06-27-Python全栈开发day23-logging、configparser、hashlib模块

1.logging模块 logging模块就是日志模块,用来记录程序运行的状态. 其中有五个级别: debug, info, warning, error, critical logging.debug('debug message')# logging.info('info message') logging.warning('warn message')#表明发生了一些意外,或者不久的将来会发生问题(如'磁盘满了').软件还是在正常工作. logging.error('error messa

Python常用模块——序列化pickle&amp;json模块

Python常用模块--序列化pickle&json模块 一.什么叫序列化? 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接收bytes. 二.为什么要序列化? 你打游戏过程中,打累了,停下来,关掉游戏,想过2天再玩.2天之后,游戏从你上次停止的地方继续运行,你上次游戏的进度肯定保存在硬盘上了,是以何种形式呢?游戏过程中产生的很多临时数据是不规律的,可能在你关掉游戏时正好有10个列表,3个嵌套字典的数据集合在内存里,需要存下来,你如何