一 hashlib

主要用于字符串加密

1

 import hashlib
md5obj=hashlib.md5() # 实例化一个md5摘要算法的对象
md5obj.update('alex3714'.encode('utf-8')) # 使用md5算法的对象来操作字符串
ret = md5obj.hexdigest() #获取算法的结果 hex+digest 16进制+消化
print(ret,type(ret)) #加盐
md5obj=hashlib.md5('hello'.encode('utf-8')) # 实例化一个md5摘要算法的对象,加盐
md5obj.update('alex3714'.encode('utf-8'))# 使用md5算法的对象来操作字符串
ret=md5obj.hexdigest()
print(ret) #动态加盐
username='hu'
md5obj=hashlib.md5(username.encode('utf-8'))
md5obj.update('alex3714'.encode('utf-8'))# 使用md5算法的对象来操作字符串里面必须是bytes类型
ret=md5obj.hexdigest()
print(ret)

二 logging日志模块

常用的格式是

 # logger对象的方式配置
logger = logging.getLogger()
# 吸星大法 # 先创造一个格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 往文件中输入
fh = logging.FileHandler('log.log',encoding='utf-8') # 创造了一个能操作文件的对象fh
fh.setFormatter(formatter) # 高可定制化
logger.addHandler(fh)
logger.setLevel(logging.DEBUG)
sh = logging.StreamHandler() #sh是在屏幕上面显示的
# sh.setFormatter(formatter1)
logger.addHandler(sh)
fh.setLevel(logging.ERROR) #文件里面显示error级别以上的
sh.setLevel(logging.DEBUG) #屏幕上面显示debug级别以上的 logger.debug('logger debug message')
logger.info('logger info message')
logger.warning('logger warning message')
logger.error('程序出错了')
logger.critical('logger critical message')

三 configparser

#该模块适用于配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),每个节可以有多个参数(键=值)。

1 用configparser写文件

 import configparser

 config = configparser.ConfigParser()

 config["DEFAULT"] = {'ServerAliveInterval': '',
'Compression': 'yes',
'CompressionLevel': '',
'ForwardX11':'yes'
} config['bitbucket.org'] = {'User':'hg'} config['topsecret.server.com'] = {'Host Port':'','ForwardX11':'no'} with open('example.ini', 'w') as configfile: config.write(configfile)

2 用configparser查找文件

 import configparser

 config = configparser.ConfigParser()

 #---------------------------查找文件内容,基于字典的形式

 print(config.sections())        #  []

 config.read('example.ini')

 print(config.sections())        #   ['bitbucket.org', 'topsecret.server.com']

 print('bytebong.com' in config) # False
print('bitbucket.org' in config) # True print(config['bitbucket.org']["user"]) # hg print(config['DEFAULT']['Compression']) #yes print(config['topsecret.server.com']['ForwardX11']) #no print(config['bitbucket.org']) #<Section: bitbucket.org> for key in config['bitbucket.org']: # 注意,有default会默认default的键
print(key) print(config.options('bitbucket.org')) # 同for循环,找到'bitbucket.org'下所有键 print(config.items('bitbucket.org')) #找到'bitbucket.org'下所有键值对 print(config.get('bitbucket.org','compression')) # yes get方法Section下的key对应的value

四 序列化

1 概念

# 什么叫序列化呢?
# { '10100011':{'name':,age: ,class:},}
# 数据类型 —— 字符串的过程
# 什么时候要用序列化呢?
# 数据从内存到文件
# 数据在网络上传输 字节 - 字符串 - 字典
# python中的序列化模块都有哪些?
# json 通用的 支持的数据类型 list tuple dict
# pickle python中通用的 支持几乎所有python中的数据类型
# shelve python中使用的便捷的序列化工具

2 json

 #dumps和loads是和内存交互的
#dump和load是和文件交互的
import json
dic={'k':'v'}
# print(type(dic))
# json_dic=json.dumps(dic) # 字典转字符串的过程 ——序列化
# print(json_dic)
# print(dic)
# print(type(json_dic))
# print(json.loads(json_dic)) #字符串 转回其他数据类型 —— 反序列化

注意:可以dump多次,但是不能多次load

怎样dump多条数据呢?

 # 如果要dump多条数据
# 每一条数据先dumps一下 编程字符串 然后打开文件 write写进文件里 \n
# 读取的时候按照标志读取或者按行读
# 读出来之后 再使用loads with open('aaa','w')as f:
str_dic=json.dumps(dic)
f.write(str_dic+'\n')
f.write(str_dic + '\n')
f.write(str_dic + '\n')
with open('aaa')as f:
for line in f:
print(json.loads(line.strip()))

3 pickle

 import pickle
class A:
def __init__(self,name):
self.name=name
alex=A('alex')
print(pickle.dumps(alex)) with open('b_pickle','wb')as f:
pickle.dump(alex,f)
pickle.dump(alex, f)
with open('b_pickle','rb')as f:
while True:
try:
obj=pickle.load(f)
print(obj.name)
except EOFError:
break

总结

#1.pickle支持更多的数据类型
# 2.pickle的结果是二进制
# 3.pickle在和文件交互的时候可以被多次load

最新文章

  1. Dojo
  2. 502 Server dropped connection
  3. Linux安装snmp
  4. C/C++ 位域
  5. C# ZedGraph 控件各属性以及示例
  6. php编程安全指南
  7. struts 2 &lt;s:select&gt; 标签
  8. Effective_java之二:慎用重载函数
  9. 控制反转(IoC)与依赖注入(DI)
  10. 简单回顾C++中的字符串
  11. 基于 USB 传输的针式打印机驱动程序开发
  12. 解决Collection &lt;__NSArrayM: 0x7f8168f7a750&gt; was mutated while being enumerated.&#39;
  13. SPA UI-router
  14. java方法的多态性理解
  15. 【Android Developers Training】 92. 序言:使用同步适配器传输数据
  16. 【js】操作checkbox radio 的操作总结
  17. 【转载】Spark学习——spark中的几个概念的理解及参数配置
  18. SPOJ LCS - Longest Common Substring 字符串 SAM
  19. Android研发中对String的思考(源代码分析)
  20. 获取 BaiduMapSDKDemo SHA1 签名

热门文章

  1. 使用 git 及 github
  2. WPF 单个模块换肤
  3. 网站被攻击扫描SQL注入的日常记录
  4. Docker容器中MySQL最大连接数被限制为214的解决方案
  5. jsp必填项加红色星号
  6. Cross-site scripting(XSS)
  7. Android——系统权限
  8. Java项目压力测试(待补)
  9. 【JZOJ3887】【长郡NOIP2014模拟10.22】字符串查询
  10. 【插拔式】分页+bootstrap4(开源)