模块补充---hashlib摘要算法---configparser配置文件-----logging日志--subprocess进程
模块补充
===hashlib摘要算法===:
===========================haslib 摘要算法============================= MD5 --快 执行一次用永不会变 SHA1 -- 越长越快 SHA1256 SHA1512 # import hashlib # md5_obj=hashlib.md5() # f=open('file') # md5_obj.update(f.read().encode('utf-8')) # # md5_obj.update(bytes('苹果',encoding='utf-8')) # print(md5_obj.hexdigest()) # ========================== 一次性 和 多次 update的结果是一样的 # bb8ef3016ffa0e007911eca69ffa28f4 # bb8ef3016ffa0e007911eca69ffa28f4 ============= ==================================== 1 检验文件的一致性 ============= ==================================== 查看文件大小 按此数读取 # import os # filesize=os.path.getsize('file') # print(filesize) # # while filesize>0: # readsize= 10 if filesize>10 else filesize # f.read(readsize) # filesize-=readsize # ============================================================ ============= ==================================== 2 储存密文密码 ============= ==================================== md5 --单向的 只能摘要成一个密文,不能反解 md5 暴力破解--撞库 密码加密写入 ------------加盐处理 # import hashlib # md5_obj=hashlib.md5(b'alex') # 加盐处理 (可以用一定的规律加盐) # md5_obj=hashlib.md5() # 加盐处理 (可以用一定的规律加盐) # md5_obj.update('opiunnhu'.encode('utf-8')) # print(md5_obj.hexdigest()) 1 检测文件的一致性 (一致性 不需要加盐) 文字文件:逐行读 视频文件:按字节读 2 储存密文密码
===logger--logging---日志===:
===========================logging 模块=============================
import logging
logging 模块的写方法 # 可以根据级别 来控制输出内容
默认级别 warning
默认格式 CRITICAL:root:b
=================logging.basicConfig()----配置方法======================
只能 在文件或者终端 选择一个输出
logging.basicConfig(
level=logging.DEBUG, # 调节级别
format=('%(asctime)s--%(filename)s--%(lineno)s--%(levelname)s--%(message)s'),
filename='log.txt',
filemode='a'
)
logging.debug('a') # 2017-09-23 18:40:41,549--demo.py--12对应的行数()--DEBUG--a
logging.info('b')
logging.warning('b')
logging.error('b')
logging.critical('b')
========================logger 对象方法========================
# logger_obj=logging.getLogger() # logger 对象
# fh=logging.FileHandler('logger_file') # 文件输出对象
# sh=logging.StreamHandler() # 屏幕输出对象
# formatter=logging.Formatter('%(asctime)s--%(filename)s--%(lineno)s--%(levelname)s--%(message)s') # 格式对象
# fh.setFormatter(formatter) #设置文件输出的格式
# sh.setFormatter(formatter) #设置屏幕输出的格式
# logger_obj.addHandler(fh) # logger对象添加 文件输出
# logger_obj.addHandler(sh) # logger对象添加 屏幕输出
# logger_obj.setLevel(logging.DEBUG) # logger 对象设置 级别
# logger_obj.info('info')
# logger_obj.error('error') # 写入文件默认是追加模式

===cofigparser 配置文件===:
configparser -- python内置配置模块 ----配置文件 格式是 字典类型 # import configparser # 写 # config = configparser.ConfigParser() # config["DEFAULT"] = {'ServerAliveInterval': '45', # 'Compression': 'yes', # 'CompressionLevel': '9', # 'ForwardX11':'yes' # } # config['bitbucket.org'] = {'User':'hg'} # config['topsecret.server.com'] = {'Host Port':'50022','ForwardX11':'no'} # with open('example.ini', 'w') as configfile: # config.write(configfile) # 读 config = configparser.ConfigParser() config.read('example.ini') print(config.sections()) print(config['DEFAULT']['Compression']) for item in config['DEFAULT']: print(item)
1 . sections() -----查看所有的节
2 section 的options config[section][option]
3 config.set(name,'homepath',path) 设置节对应的option
4add_section(par) 添加一个节
import configparser
config=configparser.ConfigParser()
def set_config():
while True:
config.read('demo.ini') # config这里包含之前文件所有内容 ( 如果没读的话 config为空 )
name = input('>> name')
path=input('>> path')
if name=='q':break
config.set(name,'homepath',path) # 修改其中的某一项内容
with open('demo.ini','w') as configfile:
config.write(configfile) # 把修改的内容 和 之前的内容 一起写入
set_config()
config.read('demo.ini')
================== subprocess模块 =============== # import subprocess # s=subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE) # Popen类---开启一个子进程---放到PIPE里面 # print(s.stdout.read().decode('gbk')) # 主进程丛 PIPE里面拿文件 # # s.wait()
读书使人心眼明亮


浙公网安备 33010602011771号