Python常用模块
【一】re
【二】time、datetime
【1】表示时间模块(time/datetime)的三种方式
- 在Python中,通常有这三种方式来表示时间:
- 时间戳
- 元组(struct_time)
- 格式化的时间字符串:
- 格式化的时间字符串(Format String): ‘1999-12-06’
【2】time
(1)导入时间模块
(2)时间戳(time)
生成时间戳
时间戳转换为时间元组(UTC时间),与英国伦敦当地时间一致
时间戳转换为时间元组(当地时间)
- 当地时间。例如我们现在在北京执行这个方法:与UTC时间相差8小时,UTC时间+8小时 = 北京时间
(3)时间字符串(strftime)
- Python中时间日期格式化符号
符号 | 含义 | 值 |
---|---|---|
%y | 两位数的年份表示 | (00-99) |
%Y | 四位数的年份表示 | (000-9999) |
%m | 月份 | (01-12) |
%d | 月内中的一天 | (0-31) |
%H | 24小时制小时数 | (0-23) |
%I | 12小时制小时数 | (01-12) |
%M | 分钟数 | (00=59) |
%S | 秒 | (00-59) |
%a | 本地简化星期名称 | |
%A | 本地完整星期名称 | |
%b | 本地简化的月份名称 | |
%B | 本地完整的月份名称 | |
%c | 本地相应的日期表示和时间表示 | |
%j | 年内的一天 | (001-366) |
%p | 本地A.M.或P.M.的等价符 | |
%U | 一年中的星期数 | (00-53)星期天为星期的开始 |
%w | 星期 | (0-6),星期天为星期的开始 |
%W | 一年中的星期数 | (00-53)星期一为星期的开始 |
%x | 本地相应的日期表示 | |
%X | 本地相应的时间表示 | |
%Z | 当前时区的名称 | |
%% | %号本身 |
(4)时间元组(struct_time)
- localtime将一个时间戳转换为当前时区的struct_time
- struct_time 元组共有9个元素共九个元素:
- (年,月,日,时,分,秒,一年中第几周,一年中第几天等)
索引(Index) | 属性(Attribute) | 值(Values) |
---|---|---|
0 | (年) | 比如2023 |
1 | tm_mon(月) | 1 - 12 |
2 | tm_mday(日) | 1 - 31 |
3 | tm_hour(时) | 0 - 23 |
4 | tm_min(分) | 0 - 59 |
5 | tm_sec(秒) | 0 - 60 |
6 | tm_wday(weekday) | 0 - 6(0表示周一) |
7 | tm_yday(一年中的第几天) | 1 - 366 |
8 | tm_isdst(是否是夏令时) | 默认为0 |
(5)小结
- 时间戳是计算机能够识别的时间;
- 时间字符串是人能够看懂的时间;
- 元组则是用来操作时间的
【3】datetime
(1)导出模块
(2)自定义日期并格式化
(3)获取本地时间
- 无论是年月日,还是年月日时分秒对象
- 都可以调用以下方法获取针对性的数据
- 以datetime对象举例
(4)timedelta对象
[1]打印时间增减
[2]推迟日期
[3]日期对象与timedelta之间的关系
- 日期对象 = 日期对象 +/- timedelta对象
- timedelta对象 = 日期对象 +/- 日期对象
- 计算生日
(5)小结
【三】os
__file__是指当前文件
【1】文件路径相关(path)
(1)获取当前文件路径(abspath)
(2)获取当前文件所在文件夹路径(dirname)
(3)判断当前路径是否存在(exists)
(4)拼接文件路径(join)
(5)切割路径(split)
(6)获取结尾文件/文件夹名(basename)
(7)当前路径是否是文件(isfile)
(8)当前路径是否为绝对路径(isabs)
(9)当前文件目录是否存在(isdir)
(10)获取当前文件或目录的最后访问时间(getatime)
(11)获取当前文件或者目录的创建时间(getctime)
(12)返回当前文件或路径的最后修改时间(getmtime)
(13)返回当前文件的大小(getsize)
【3】路径操作(os)
(1)创建单级文件夹(mkdir)
只能创建单级路径,多级会报错
(2)创建多级文件夹(makedirs)
【四】random
【1】导入模块
【2】随机小数
(1)默认区间的小数(random)
- 大于0且小于1之间的小数
(2)指定区间的小数(uniform)
【3】随机整数
【4】随机返回
【5】打乱列表顺序(shuffle)
【五】json、pickle
【1】什么是序列化
- 将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化。
【2】为什么要有序列化
-
比如,我们在
代码中计算的一个数据需要给另外一段程序使用,那我们怎么给?
- 现在我们能想到的方法就是存在文件里
- 然后另一个
python
程序再从文件里读出来。
-
但是我们都知道
- 对于文件来说是没有字典这个概念的
- 所以我们只能将数据转换成字典放到文件中。
-
你一定会问,将字典转换成一个字符串很简单,就是
就可以办到了
- 为什么我们还要学习序列化模块呢?
-
没错序列化的过程就是从
dic
变成str(dic)
的过程。 -
现在你可以通过
- 将一个名为
dic
的字典转换成一个字符串,
- 将一个名为
-
但是你要怎么把一个字符串转换成字典呢?
-
聪明的你肯定想到了
eval()
,如果我们将一个字符串类型的字典str_dic
传给eval
,就会得到一个返回的字典类型了。 -
eval()函数十分强大,但是
是做什么的?
- 官方demo解释为:
- 将字符串
str
当成有效的表达式来求值并返回计算结果。 BUT!
强大的函数有代价。安全性是其最大的缺点。
-
-
想象一下
- 如果我们从文件中读出的不是一个数据结构,
- 而是一句"删除文件"类似的破坏性语句
- 那么后果实在不堪设设想。
而使用eval
就要担这个风险。
-
所以
- 我们并不推荐用
eval
方法来进行反序列化操作(将str
转换成python
中的数据结构)
- 我们并不推荐用
【3】序列化的目的
- 以某种存储形式使自定义对象持久化;
- 将对象从一个地方传递到另一个地方。
- 使程序更具维护性。
【4】序列化模块json
(1)序列化方法(loads)
(2)反序列化(dumps)
(3)写入文件(dump)
(4)读文件数据(load)
【5】序列化模块pickle
- json & pickle 模块 (用于序列化的两个模块)
- json
- 用于字符串 和 python数据类型间进行转换
- pickle
- 用于python特有的类型 和 python的数据类型间进行转换
(1)序列化方法(dumps)
(2)反序列化方法(loads)
(3)写入文件(dump)
(4)读文件数据(load)
【6】小练习
- 将Python特有的函数写入文件
- 将Python特有的函数对象在文件中读出来并调用
【7】小结
- 这时候机智的你又要说了,既然pickle如此强大,为什么还要学json呢?
- 这里我们要说明一下
- json是一种所有的语言都可以识别的数据结构。
- 如果我们将一个字典或者序列化成了一个json存在文件里
- 那么java代码或者js代码也可以拿来用。
- 但是如果我们用pickle进行序列化
- 其他语言就不能读懂这是什么了~
- 所以,如果你序列化的内容是列表或者字典,我们非常推荐你使用json模块
- 但如果出于某种原因你不得不序列化其他的数据类型,而未来你还会用python对这个数据进行反序列化的话,那么就可以使用pickle
【六】subprocess
【1】介绍
- subprocess模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。
- 简单理解就是:使用我们自己的电脑去链接别人的电脑 (socket模块)
【2】使用
【3】run方法
【4】Pepen方法
- Popen 是 subprocess的核心,子进程的创建和管理都靠它处理。
【5】call方法
【七】hashlib
【1】什么是摘要算法
- Python的hashlib提供了常见的摘要算法
- 如MD5
- SHA1等等。
- 摘要算法又称哈希算法、散列算法。
- 它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
- 摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest
- 目的是为了发现原始数据是否被人篡改过。
- 摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数
- 计算f(data)很容易,但通过digest反推data却非常困难。
- 而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。
【2】加密数据
(1)一次性加密(同一段数据)
- 我们以常见的摘要算法MD5为例,计算出一个字符串的MD5值:
(2)分次加密(同一段数据)
- 如果数据量很大,可以分块多次调用update(),最后计算的结果是一样的:
- MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。
【3】摘要算法升级之加盐
- 任何允许用户登录的网站都会存储用户登录的用户名和口令。
- 如何存储用户名和口令呢?
- 方法是存到数据库表中:
- 如果以明文保存用户口令,如果数据库泄露,所有用户的口令就落入黑客的手里。
- 此外,网站运维人员是可以访问数据库的,也就是能获取到所有用户的口令。
- 正确的保存口令的方式是不存储用户的明文口令,而是存储用户口令的摘要,比如MD5:
- 考虑这么个情况,很多用户喜欢用123456,888888,password这些简单的口令
- 于是,黑客可以事先计算出这些常用口令的MD5值,得到一个反推表:
- 这样,无需破解,只需要对比数据库的MD5,黑客就获得了使用常用口令的用户账号。
- 对于用户来讲,当然不要使用过于简单的口令。
- 但是,我们能否在程序设计上对简单口令加强保护呢?
- 由于常用口令的MD5值很容易被计算出来
- 所以,要确保存储的用户口令不是那些已经被计算出来的常用口令的MD5
- 这一方法通过对原始口令加一个复杂字符串来实现,俗称“加盐”:
- 经过Salt处理的MD5口令,只要Salt不被黑客知道,即使用户输入简单口令,也很难通过MD5反推明文口令。
- 但是如果有两个用户都使用了相同的简单口令比如123456,在数据库中,将存储两条相同的MD5值,这说明这两个用户的口令是一样的。
- 有没有办法让使用相同口令的用户存储不同的MD5呢?
- 如果假定用户无法修改登录名,就可以通过把登录名作为Salt的一部分来计算MD5,从而实现相同口令的用户也存储不同的MD5。
- 摘要算法在很多地方都有广泛的应用。
- 要注意摘要算法不是加密算法,不能用于加密(因为无法通过摘要反推明文),只能用于防篡改,但是它的单向计算特性决定了可以在不存储明文口令的情况下验证用户口令。
【4】摘要算法模版
【5】SHA1
- 另一种常见的摘要算法是SHA1,调用SHA1和调用MD5完全类似:
- SHA1的结果是160 bit字节,通常用一个40位的16进制字符串表示。
- 比SHA1更安全的算法是SHA256和SHA512,不过越安全的算法越慢,而且摘要长度更长。
【6】MD5加密在验证登录中的应用
【八】logging
【1】日志模版
__EOF__

本文作者:Fredette
本文链接:https://www.cnblogs.com/Fredette/p/17967823.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/Fredette/p/17967823.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)