DAY17
Posted huansan0209
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DAY17相关的知识,希望对你有一定的参考价值。
DAY17
time模块
时间戳
时间戳(timestamp):时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。
格式化时间
格式化的时间字符串(format string):格式化时间表示的是普通的字符串格式的时间。
结构化时间
结构化时间(struct time):struct_time元组共有9个元素,分别为(年,月,日,时,分,秒。一年中第几周,一年中第几天,夏令时)
不同格式时间的转换
如上图所示,我们总能通过某些方法在结构化时间-格式化时间-时间戳三者之间进行转换。
datetime
datetime模块可以看成是时间加减的模块
json和pickle模块
序列号
把对象(变量)从内存中变成可储存或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening。
序列化的优点:
- 持久保存状态:内存是无法永久保存数据的,当程序运行了一段时间,我们断电或者重启程序,内存中关于这个程序的之前一段时间的数据(有结构)都被清空了。但是在断电或重启程序之前将程序当前内存中所有的数据都保存下来(保存到文件中),以便下次程序能够从文件中载入之前的数据,然后继续执行,这就是序列化。
- 跨平台数据交互:序列化时不仅可以把序列化后的内容写入磁盘,还可以通过网络传输到别的机器上,如果收发的双方约定好实用一种序列化的格式,那么便打破了平台/语言差异化带来的限制,实现了跨平台数据交互。
json
json序列化并不是Python独有的,json序列化在java等语言中也会涉及到,因此使用json序列化能够达到跨平台传输数据的目的。
json数据类型和python数据类型对于关系表
Json类型 | Python类型 |
---|---|
dict | |
[] | list |
"string" | str |
520.13 | int或float |
true/false | True/False |
null | None |
json模块序列化和反序列化的一个过程如下图所示
pickle
pickle序列化和所有其他编程语言特有的序列化问题一样,它只能用于Python,并且可能不同版本的Python彼此都不兼容,因此,只能用pickle保存那些不重要的数据,即不能成功地反序列化也没关系。但是pickle的好处是可以存储Python中的所有的数据类型,包括对象,而json不可以。
pick模块序列化和反序列化的过程如下:
hashlib和hmac模块
hash是什么
hash是一种算法(Python3.版本里使用hashlib模块代替了md5模块和sha模块,主要提供SHA1、SHA224、SHA256、SHA384、SHA512、MD5算法),该算法接受传入的内容,经过运算得到一串hash值。
hash值的特点:
- 只要传入的内容一样,得到的hash值一样,可用于非明文密码传输时密码校验
- 不能由hash值返解成内容,即可以保证非明文密码的安全性
- 只要使用的hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的,可以用于对文本的哈希处理。
hash算法其实可以看成如下图所示的一座工厂,工厂接收你送来的原材料,经过加工返回的产品就是hash值
撞库破解hash算法加密
hash加密算法虽然看起来很厉害,但是他是存在一定缺陷的,即可以通过撞库可以反解。
为了防止密码被撞库,我们可以使用python中的另一个hmac模块,它内部对我们创建key和内容做过某种处理后在加密。
如果要保证hmac模块最终结果一致,必须保证:
- hmac.new括号内指定的初始key一样
- 无论update多少次,校验的内容累加到一起是一样的内容
logging模块
低配logging
日志总共分为以下五个级别,这五个级别自下而上进行匹配debug-->info-->warning-->error-->critical,默认最低级别为warning级别。
v1
v1版本无法指定日志的级别;无法指定日志的格式;只能往屏幕打印,无法写入文件。因此可以改成下述的代码。
v2
v2版本不能指定字符编码;只能往文件中打印。
v3
logging模块包含四种角色:logger、Filter、Formatter对象、Handler
- logger:产生日志的对象
- Filter:过滤日志的对象
- Formatter对象:可以定制不同的日志格式对象,然后绑定给不同的Handler对象使用,以此来控制不同的Handler的日志格式
- Handler:接收日志然后控制打印到不同的地方,FileHandler用来打印到文件中,StreamHandler用来打印到终端
配置日志文件
以上三个版本的日志只是为了引出我们下面的日志配置文件
以上是关于DAY17的主要内容,如果未能解决你的问题,请参考以下文章