模块
time模块
有三种方式显示时间,在需要时间的地方就可以调用,还有一个功能是暂停程序
三种显示时间方式:
-
时间戳:
time.time()
表示python中从1970年开始计算过去了多少秒 -
格式化时间:
time.strftime('%Y|%m|%d %X')
-
结构化时间:
time.localtime()
以北京时间为准time.gmtime()
以格林威治时间为准time.gmtime(0)
是显示1970年的时间三种显示方式之间可以互相转化
time.sleep(3)
:表示停顿了3秒
datetime模块
可以显示时间,也可以调整时间,对时间做加减
now=datetime.datetime.now()表示显示当前时间
print(now + datetime.timedelta(days=5)) # 默认为天
print(now - datetime.timedelta(5)) # 默认为天
print(now + datetime.timedelta(-5)) # 默认为天
# print(now + datetime.timedelta(years=5)) # 无法加年和月
print(now + datetime.timedelta(hours=5))
print(now + datetime.timedelta(minutes=65))
print(now + datetime.timedelta(seconds=65))
print(now.replace(year=2012,month=12,day=22,hour=5,minute=13,second=14)) #将年月日等替换
random模块
random.random()
:打印0~1之间的数,不会取0和1
random.randint(1,3)
:打印1到3的整数,包括1,3
random.uniform(1,3)
:打印1~3的小数,不包括1,3
random.randrange(1,3)
:打印1~3的整数,包括1,不包括3
random.choice([10000,2,1,3,4])
:从中随机选择一个
random.sample([1,'a',2,'b'],2)
:从中随机选择多个
lis = [1,2,3,4]
random.shuffle(lis)
打乱顺序
os模块(和操作系统交互,文件操作)
os.mkdir()
:创建文件夹
os.removedirs()
:删除空文件夹,递归往上删除空文件夹
os.rmdir()
:删除一个空文件夹
os.listdir()
:列出文件夹内所有文件名和隐藏文件名
os.remove()
:删除文件
os.rename()
:重命名文件
os.environ
显示环境变量
os.path.dirname()
:显示文件或文件夹所在当前的文件夹名称
os.path.exists()
:判断文件是否存在
os.path.join()
:拼接文件路径,因为不同系统的路径拼接符不一样
os.path.getsize()
:计算文件大小
os.walk()
:打印文件夹下所有文件夹和文件
sys模块(与Python交互)
print(sys.argv)
:是获取运行python文件的时候命令行参数,且以list形式存储参数,列表中第一个元素时程序本身路径,后面是外加的命令行参数
sys.hexversion
:获取解释器版本
sys.path
:返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.stdout.write()
:打印,类似于print()
sys.stdin.read()
:read读取数据 ctrl+d是结束输入 ,read并不会像input那样遇到回车就返回读取的数据它会缓存或者 等到ctrl d再读取数据或者可以使用sys.stdin.readline()
进行输入
json模块
1.序列化
保存数据(从内存到硬盘这个过程中规定了格式,这个过程叫做序列化),这里保存的格式为json文件
2.反序列化
把json文件从硬盘中读取出来
json文件并不是python所独有的,所有的语言都有json,跨平台/语言传输数据,json文件里一般保存的是字典和列表
同样也是使用with open打开json文件,使用json.dump
写入数据,使用json.load
读取文件内容。
pickle模块
pickle也是序列化和反序列化,json可以跨平台,只支持dict/list/str/int/float/bool/None
pickle支持python中任意数据类型,所以不能跨平台(不同平台的函数一定是不同的),pickle模块序列化过程是以二进制形式转换
使用方法和json模块类似,不过由于传输时使用的是二进制,写入是用wb模式,读取时使用rb模式。
hashlib模块/hamc模块
hashlib模块一般用于明文加密。
hashlib提供了常见的哈希算法,如MD5,SHA1等等。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
hash值的特点:
- 只要传入的内容一样,得到的hash值一样,可用于非明文密码传输时密码校验
- 不能由hash值返解成内容,即可以保证非明文密码的安全性
- 只要使用的hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的,可以用于对文本的哈希处理,比如MD5算法是32位16进制的字符串。
- 可以将较长的传入内容分开写入,多次update,得到的hash值和一次整个写入结构一样
hash加密算法虽然看起来很厉害,但是他是存在一定缺陷的,即可以通过撞库可以反解
为了防止密码被撞库,我们可以使用python中的另一个hmac 模块,它类似于hashlib模块,但在转化为hash值前做了个处理,使用hmac.new加了一层口令,这样会造成当输入不同口令时,后面输入的内容就算一致最终得到的hash值也会不同,而且hmac模块只接受二进制数据。
logging模块
日志是一种可以追踪某些软件运行时所发生事件的方法。软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情。一个事件可以用一个可包含可选变量数据的消息来描述。通常分为五个等级(level)。
日志五个等级
日志等级(level) | 描述 |
---|---|
DEBUG | 最详细的日志信息,典型应用场景是 问题诊断 |
INFO | 信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作 |
WARNING | 当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的 |
ERROR | 由于一个更严重的问题导致某些功能不能正常运行时记录的信息 |
CRITICAL | 当发生严重错误,导致应用程序不能继续运行时记录的信息 |
默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志
logging模块中可以用 logging.basicConfig()函数调整日志级别、输出格式等
日志模块四大组件
日志流处理流程时通过函数logging.getLogger([name])返回一个logger对象,如果没有指定名字将返回root logger
在介绍logging模块的日志流处理流程之前,我们先来介绍下logging模块的四大组件:
组件名称 | 对应类名 | 功能描述 |
---|---|---|
日志器 | Logger | 提供了应用程序可一直使用的接口 |
处理器 | Handler | 将logger创建的日志记录发送到合适的目的输出 |
过滤器 | Filter | 提供了更细粒度的控制工具来决定输出哪条日志记录,丢弃哪条日志记录 |
格式器 | Formatter | 决定日志记录的最终输出格式 |
logging模块就是通过这些组件来完成日志处理的,上面所使用的logging模块级别的函数也是通过这些组件对应的类来实现的。
整个流程:
- logger:产生日志的对象
- Filter:过滤日志的对象
- Formatter对象:可以定制不同的日志格式对象,然后绑定给不同的Handler对象使用,以此来控制不同的Handler的日志格式
- Handler:接收日志然后控制打印到不同的地方,FileHandler用来打印到文件中,StreamHandler用来打印到终端
- 为Handler对象绑定格式
- 将Handler添加给logger并设置日志级别
- 测试