常用模块-02
一、hashlib模块
1.1、hashlib模块提供了很多加密的算法,这里介绍一下hashlib的简单使用事例,用hashlib的md5算法加密数据
#python2的用法
m2 = hashlib.md5("a") #这里还可以另外加上一个随机数,增加密码复杂度
src = "123456"
m2.update(src) #对src这个数进行md5加密
print(m2.hexdigest()) #打印加密后的结果
#python3的用法
m3 = hashlib.md5("123456".encode("utf-8")) #增加随机数
src = bytes("ling", encoding="utf-8") #转换为字节
m3.update(src)
print(m3.hexdigest())
二、StringIO模块
在python2中是直接导入, 在python3中是放到io模块里了
2.1、在平时的开发过程中,有时候我们并不需要写在文件中,可以直接通过StringIO模块直接写入到系统内存中,如果不用了,直接清除就可以了。StringIO主要是用来在内存中写入字符串及字符串的缓存,它的接口和文件操作的接口是一致的,基本所有关于文件的方法都是可以用的,只要几个特殊的:
①、StringIO().getvalue():此函数没有参数,无论读写位置在哪里,都能够返回对象中的所有数据
②、StringIO().truncate(0):参数为0,表示清空所有写入的内容
③、StringIO().flush():刷新内部缓冲区
2.2、示例:
from io import StringIO
stringIO = StringIO()
stringIO.write("hello") #写入到内存
stringIO.write("world") #写入到内存
print(stringIO.getvalue()) #打印出来
stringIO.truncate(0) #清空0之后的所有
print(stringIO.getvalue()) #再次打印没有东西了test = dict(a=1)
print(bytes(str(test).encode("utf-8"))) #修改字典为byte格式,需要先转换为字符串才能修改
StringIO操作的只能是str,如果要操作二进制数据,就需要用BytesIO,二进制可以操作任何东西
三、json模块
3.1、JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写
①、json.dumps():把python对象转化成json数据类型
②、json.loads():把json数据类型转化成python对象
需要注意的是json是一个str类型,但是转换的话只能用上面两个互转而不能用str强制转换,不然再重新loads的话会报错
③、json.dump():把python对象写入文件
④、json.load():把文件转换成python对象
3.2、示例
import json
test = '''[{"a": 1, "aa": 11, "aaa": 111}, {"b": 2, "bb": 22, "bbb": 222}, {"c":3}]'''
newTest = json.loads(test)
print(type(newTest))
print(newTest[0]["a"]) #获取test的"a"值
3.3、爬取数据示例:
import json
import requests
url = "http://qwd.jd.com/fcgi-bin/qwd_activity_list?g_tk=1231472791&env=3"
session = requests.session()
r = session.get(url)
result = json.loads(r.text) #转换为python对象
print(result["errCode"])
print(result["msg"])
3.4、示例:
import json
a = dict(hello="你好")
print(a)
print(a["hello"])
# print(str(a))
print(json.dumps(a, ensure_ascii=False)) #ensure_ascii=False做转码用避免乱码#在python2中第一个打印a是内存中的显示形式,而在python3就不存在这种情况了
3.5、示例:
import codecs
import json
test = {"a": 1, "b": 2}
with codecs.open("1.txt", "w") as f:
json.dump(test, f) #需要关闭文件才能操作,写入到1.txt文件内
with codecs.open("1.txt", "r") as f:
aa = json.load(f)
print(aa)
print(type(aa))