加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python:常用模块二

发布时间:2020-12-17 00:01:02 所属栏目:Python 来源:网络整理
导读:1,hashlib模块---摘要算法 md5 =span style="color: #000000" hashlib.md5() md5.update( span style="color: #800000"' span style="color: #800000"how to use md5 in python hashlib? span style="color: #800000"' span style="color: #000000") span st

1,hashlib模块---摘要算法

md5 =<span style="color: #000000"> hashlib.md5()
md5.update(
<span style="color: #800000">'<span style="color: #800000">how to use md5 in python hashlib?<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #0000ff">print<span style="color: #000000"> md5.hexdigest()

计算结果如下:
d26a53750bc40b38b65a520292f69306

如果数据量很大,可以分块多次调用update(),最后计算的结果是一样的:

md5 = md5.hexdigest()

MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。另一种常见的摘要算法是SHA1,调用SHA1和调用MD5完全类似:

sha1 =<span style="color: #000000"> hashlib.sha1()
sha1.update(
<span style="color: #800000">'<span style="color: #800000">how to use sha1 in <span style="color: #800000">'<span style="color: #000000">)
sha1.update(<span style="color: #800000">'<span style="color: #800000">python hashlib?<span style="color: #800000">'<span style="color: #000000">)
<span style="color: #0000ff">print sha1.hexdigest()

SHA1的结果是160 bit字节,通常用一个40位的16进制字符串表示。比SHA1更安全的算法是SHA256和SHA512,不过越安全的算法越慢,而且摘要长度更长。

2,configparser模块

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

创建文件

来看一个好多软件的常见文档格式如下:

= 45== 9=[bitbucket.org]
User
=<span style="color: #000000"> hg

[topsecret.server.com]
Port = 50022<span style="color: #000000">
ForwardX11 = no

如果想用python生成一个这样的文档怎么做呢?

=] = {: : : :config[<span style="color: #800000">'<span style="color: #800000">bitbucket.org<span style="color: #800000">'] = {<span style="color: #800000">'<span style="color: #800000">User<span style="color: #800000">':<span style="color: #800000">'<span style="color: #800000">hg<span style="color: #800000">'<span style="color: #000000">}

config[<span style="color: #800000">'<span style="color: #800000">topsecret.server.com<span style="color: #800000">'] = {<span style="color: #800000">'<span style="color: #800000">Host Port<span style="color: #800000">':<span style="color: #800000">'<span style="color: #800000">50022<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">ForwardX11<span style="color: #800000">':<span style="color: #800000">'<span style="color: #800000">no<span style="color: #800000">'<span style="color: #000000">}

with open(<span style="color: #800000">'<span style="color: #800000">example.ini<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">w<span style="color: #800000">'<span style="color: #000000">) as configfile:

config.write(configfile)

查找文件

config =<span style="color: #000000"> configparser.ConfigParser()

<span style="color: #008000">#<span style="color: #008000">---------------------------查找文件内容,基于字典的形式

<span style="color: #0000ff">print(config.sections()) <span style="color: #008000">#<span style="color: #008000"> []
<span style="color: #000000">
config.read(<span style="color: #800000">'<span style="color: #800000">example.ini<span style="color: #800000">'<span style="color: #000000">)

<span style="color: #0000ff">print(config.sections()) <span style="color: #008000">#<span style="color: #008000"> ['bitbucket.org','topsecret.server.com']

<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">bytebong.com<span style="color: #800000">' <span style="color: #0000ff">in config) <span style="color: #008000">#<span style="color: #008000"> False
<span style="color: #0000ff">print(<span style="color: #800000">'<span style="color: #800000">bitbucket.org<span style="color: #800000">' <span style="color: #0000ff">in config) <span style="color: #008000">#<span style="color: #008000"> True

<span style="color: #0000ff">print(config[<span style="color: #800000">'<span style="color: #800000">bitbucket.org<span style="color: #800000">'][<span style="color: #800000">"<span style="color: #800000">user<span style="color: #800000">"]) <span style="color: #008000">#<span style="color: #008000"> hg

<span style="color: #0000ff">print(config[<span style="color: #800000">'<span style="color: #800000">DEFAULT<span style="color: #800000">'][<span style="color: #800000">'<span style="color: #800000">Compression<span style="color: #800000">']) <span style="color: #008000">#<span style="color: #008000">yes

<span style="color: #0000ff">print(config[<span style="color: #800000">'<span style="color: #800000">topsecret.server.com<span style="color: #800000">'][<span style="color: #800000">'<span style="color: #800000">ForwardX11<span style="color: #800000">']) <span style="color: #008000">#<span style="color: #008000">no

<span style="color: #0000ff">print(config[<span style="color: #800000">'<span style="color: #800000">bitbucket.org<span style="color: #800000">']) <span style="color: #008000">#<span style="color: #008000">

<span style="color: #0000ff">for key <span style="color: #0000ff">in config[<span style="color: #800000">'<span style="color: #800000">bitbucket.org<span style="color: #800000">']: <span style="color: #008000">#<span style="color: #008000"> 注意,有default会默认default的键
<span style="color: #0000ff">print<span style="color: #000000">(key)

<span style="color: #0000ff">print(config.options(<span style="color: #800000">'<span style="color: #800000">bitbucket.org<span style="color: #800000">')) <span style="color: #008000">#<span style="color: #008000"> 同for循环,找到'bitbucket.org'下所有键

<span style="color: #0000ff">print(config.items(<span style="color: #800000">'<span style="color: #800000">bitbucket.org<span style="color: #800000">')) <span style="color: #008000">#<span style="color: #008000">找到'bitbucket.org'下所有键值对

<span style="color: #0000ff">print(config.get(<span style="color: #800000">'<span style="color: #800000">bitbucket.org<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">compression<span style="color: #800000">')) <span style="color: #008000">#<span style="color: #008000"> yes get方法Section下的key对应的value

增删改操作

config =<span style="color: #000000"> configparser.ConfigParser()

config.read(<span style="color: #800000">'<span style="color: #800000">example.ini<span style="color: #800000">'<span style="color: #000000">)

config.add_section(<span style="color: #800000">'<span style="color: #800000">yuan<span style="color: #800000">'<span style="color: #000000">)

config.remove_section(<span style="color: #800000">'<span style="color: #800000">bitbucket.org<span style="color: #800000">'<span style="color: #000000">)
config.remove_option(<span style="color: #800000">'<span style="color: #800000">topsecret.server.com<span style="color: #800000">',<span style="color: #800000">"<span style="color: #800000">forwardx11<span style="color: #800000">"<span style="color: #000000">)

config.set(<span style="color: #800000">'<span style="color: #800000">topsecret.server.com<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">k1<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">22222<span style="color: #800000">'<span style="color: #000000">)
config.set(<span style="color: #800000">'<span style="color: #800000">yuan<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">k2<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">22222<span style="color: #800000">'<span style="color: #000000">)

config.write(open(<span style="color: #800000">'<span style="color: #800000">new2.ini<span style="color: #800000">',<span style="color: #800000">"<span style="color: #800000">w<span style="color: #800000">"))

logging模块

函数式简单配置

)

默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为WARNING(日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG),默认的日志格式为日志级别:Logger名称:用户输出消息。

灵活配置日志级别,日志格式,输出位置:

=====logging.debug(<span style="color: #800000">'<span style="color: #800000">debug message<span style="color: #800000">'<span style="color: #000000">)
logging.info(
<span style="color: #800000">'
<span style="color: #800000">info message
<span style="color: #800000">'
<span style="color: #000000">)
logging.warning(
<span style="color: #800000">'
<span style="color: #800000">warning message
<span style="color: #800000">'
<span style="color: #000000">)
logging.error(
<span style="color: #800000">'
<span style="color: #800000">error message
<span style="color: #800000">'
<span style="color: #000000">)
logging.critical(
<span style="color: #800000">'
<span style="color: #800000">critical message
<span style="color: #800000">')

配置参数:

filename:用指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中。
filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
format:指定handler使用的日志显示格式。
datefmt:指定日期时间格式。
level:设置rootlogger(后边会讲解具体概念)的日志级别
stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件(f
=<span style="color: #000000">open(‘test.log’,’w’)),默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。

format参数中可能用到的格式化串:
%<span style="color: #000000">(name)s Logger的名字
%<span style="color: #000000">(levelno)s 数字形式的日志级别
%<span style="color: #000000">(levelname)s 文本形式的日志级别
%<span style="color: #000000">(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
%<span style="color: #000000">(filename)s 调用日志输出函数的模块的文件名
%<span style="color: #000000">(module)s 调用日志输出函数的模块名
%<span style="color: #000000">(funcName)s 调用日志输出函数的函数名
%<span style="color: #000000">(lineno)d 调用日志输出函数的语句所在的代码行
%<span style="color: #000000">(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
%<span style="color: #000000">(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
%(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896<span style="color: #000000">”。逗号后面的是毫秒
%<span style="color: #000000">(thread)d 线程ID。可能没有
%<span style="color: #000000">(threadName)s 线程名。可能没有
%<span style="color: #000000">(process)d 进程ID。可能没有
%(message)s用户输出的消息

logger对象配置

logger =<span style="color: #000000"> logging.getLogger()
<span style="color: #008000">#<span style="color: #008000"> 创建一个handler,用于写入日志文件
fh = logging.FileHandler(<span style="color: #800000">'<span style="color: #800000">test.log<span style="color: #800000">',encoding=<span style="color: #800000">'<span style="color: #800000">utf-8<span style="color: #800000">'<span style="color: #000000">)

<span style="color: #008000">#<span style="color: #008000"> 再创建一个handler,用于输出到控制台
ch =<span style="color: #000000"> logging.StreamHandler()
formatter = logging.Formatter(<span style="color: #800000">'<span style="color: #800000">%(asctime)s - %(name)s - %(levelname)s - %(message)s<span style="color: #800000">'<span style="color: #000000">)

fh.setLevel(logging.DEBUG)

fh.setFormatter(formatter)
ch.setFormatter(formatter)
logger.addHandler(fh) <span style="color: #008000">#<span style="color: #008000">logger对象可以添加多个fh和ch对象
<span style="color: #000000">logger.addHandler(ch)

logger.debug(<span style="color: #800000">'<span style="color: #800000">logger debug message<span style="color: #800000">'<span style="color: #000000">)
logger.info(<span style="color: #800000">'<span style="color: #800000">logger info message<span style="color: #800000">'<span style="color: #000000">)
logger.warning(<span style="color: #800000">'<span style="color: #800000">logger warning message<span style="color: #800000">'<span style="color: #000000">)
logger.error(<span style="color: #800000">'<span style="color: #800000">logger error message<span style="color: #800000">'<span style="color: #000000">)
logger.critical(<span style="color: #800000">'<span style="color: #800000">logger critical message<span style="color: #800000">')

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读