常用模块
模块, 用一砣代码实现了某个功能的代码集合.
类似于函数式编程和面向过程编程, 函数式编程则完成一个功能, 其他代码用来调用即可, 提供了代码的重用性和代码间的耦合. 而对于一个复杂的功能来, 可能需要多个函数才能完成(函数又可以在不同的. py 文件中),n 个 .py 文件组成的代码集合就称为模块.
python 常用模块主要有:
1. time 模块
2. random 模块
3. hashlib 模块
4. os 模块
5. sys 模块
6. logging 模块
7. 序列化模块
8. configparser 模块
9. re 模块
10. shutul 模块
11. subprocess 模块
12. xml 模块
13. paramiko 模块
引入模块的方式
- import module
- import module.xxx as name
- from module import xxx,xxx
- from module import *
对于第二种的引入方式, 将导入的模块或者模块方法重命名, 个人觉得好处主要有以下两点:
1. 对于模块名过于冗长的模块, 可以方便使用;
2. 对于某些功能可能涉及到修改模块的源码, 这样的导入方式可以避免影响到原来的模块(类似于为每个项目建一个自己的虚拟环境).
time 模块
1. 表示时间的三种方式:
(1)时间戳(timestamp) : 通常来说, 时间戳表示的是从 1970 年 1 月 1 日 00:00:00 开始按秒计算的偏移量. 我们运行 "type(time.time())", 返回的是 float 类型.
(2)格式化的时间字符串(Format String): '1988-03-16'
(3)元组(struct_time) :struct_time 元组共有 9 个元素共九个元素:(年, 月, 日, 时, 分, 秒, 一年中第几周, 一年中第几天等)
时间戳是计算机能够识别的时间; 时间字符串是人能够看懂的时间; 元组则是用来操作时间的
- # <1> 时间戳
- import time
- time.time() #-------------- 返回当前时间的时间戳: 1493136727.099066
- # <2> 时间字符串
- time.strftime("%Y-%m-%d %X") # -----------'2017-04-26 00:32:18'
- # <3> 时间元组
- time.localtime()
- time.struct_time(tm_year=2017, tm_mon=4, tm_mday=26,
- tm_hour=0, tm_min=32, tm_sec=42, tm_wday=2,
- tm_yday=116, tm_isdst=0)
2. 几种时间形式的转换
- # 一 时间戳 <----> 结构化时间: localtime/gmtime mktime
- time.localtime(3600*24)
- time.gmtime(3600*24)
- time.mktime(time.localtime())
- #字符串时间 <----> 结构化时间: strftime/strptime
- time.strftime("%Y-%m-%d %X", time.localtime())
- time.strptime("2017-03-16","%Y-%m-%d")
- time.asctime(time.localtime(312343423))
- time.ctime(312343423)
3.time & datetime 常用操作
- #_*_coding:utf-8_*_
- __author__ = 'Alex Li'
- import time
- # print(time.clock()) #返回处理器时间, 3.3 开始已废弃 , 改成了 time.process_time()测量处理器运算时间, 不包括 sleep 时间, 不稳定, Mac 上测不出来
- # print(time.altzone) #返回与 utc 时间的时间差, 以秒计算 \
- # print(time.asctime()) #返回时间格式 "Fri Aug 19 11:14:16 2016",
- # print(time.localtime()) #返回本地时间 的 struct time 对象格式
- # print(time.gmtime(time.time()-800000)) #返回 utc 时间的 struc 时间对象格式
- # print(time.asctime(time.localtime())) #返回时间格式 "Fri Aug 19 11:14:16 2016",
- #print(time.ctime()) #返回 Fri Aug 19 12:38:29 2016 格式, 同上
- # 日期字符串 转成 时间戳
- # string_2_struct = time.strptime("2016/05/22","%Y/%m/%d") #将 日期字符串 转成 struct 时间对象格式
- # print(string_2_struct)
- # #
- # struct_2_stamp = time.mktime(string_2_struct) #将 struct 时间对象转成时间戳
- # print(struct_2_stamp)
- #将时间戳转为字符串格式
- # print(time.gmtime(time.time()-86640)) #将 utc 时间戳转换成 struct_time 格式
- # print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) ) #将 utc struct_time 格式转成指定的字符串格式
- #时间加减
- import datetime
- # print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925
- #print(datetime.date.fromtimestamp(time.time()) ) # 时间戳直接转成日期格式 2016-08-19
- # print(datetime.datetime.now() )
- # print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间 + 3 天
- # print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间 - 3 天
- # print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间 + 3 小时
- # print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间 + 30 分
- #
- # c_time = datetime.datetime.now()
- # print(c_time.replace(minute=3,hour=2)) #时间替换
- View Code
random 模块
- import random
- random.random() # 大于 0 且小于 1 之间的小数 0.7664338663654585
- random.randint(1,5) # 大于等于 1 且小于等于 5 之间的整数
- random.randrange(1,3) # 大于等于 1 且小于 3 之间的整数
- random.choice([1,'23',[4,5]]) # #1 或者 23 或者[4,5]
- random.sample([1,'23',[4,5]],2) # #列表元素任意 2 个组合 [[4, 5], '23']
- random.uniform(1,3) #大于 1 小于 3 的小数 1.6270147180533838
- item=[1,3,5,7,9]
- random.shuffle(item) # 打乱次序 item[5, 1, 3, 7, 9]
- random.shuffle(item) # item [5, 9, 7, 1, 3]
- View Code
- # 随机生成验证码
- import random
- def v_code():
- code = ''
- for i in range(5):
- num=random.randint(0,9)
- alf=chr(random.randint(65,90))
- add=random.choice([num,alf])
- code="".join([code,str(add)])
- return code
- print(v_code())
随机生成验证码
hashlib 模块
哈希算法(散列算法): 通过一个函数, 把任意长度的数据转换为一个长度固定的数据串(通常用 16 进制的字符串表示), 常常用于对密码进行加密. hashlib 模块主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 等加密算法.
- import hashlib
- # ######## md5 ########
- hash = hashlib.md5()
- # help(hash.update)
- hash.update(bytes('admin', encoding='utf-8'))
- print(hash.hexdigest()) #16 进制格式 hash
- print(hash.digest()) #2 进制格式 hash
- ######## sha1 ########
- hash = hashlib.sha1()
- hash.update(bytes('admin', encoding='utf-8'))
- print(hash.hexdigest())
- # ######## sha256 ########
- hash = hashlib.sha256()
- hash.update(bytes('admin', encoding='utf-8'))
- print(hash.hexdigest())
- # ######## sha384 ########
- hash = hashlib.sha384()
- hash.update(bytes('admin', encoding='utf-8'))
- print(hash.hexdigest())
- # ######## sha512 ########
- hash = hashlib.sha512()
- hash.update(bytes('admin', encoding='utf-8'))
- print(hash.hexdigest())
- View Code
以上加密算法虽然依然非常厉害, 但时候存在缺陷, 即: 通过撞库可以反解. 所以, 有必要对加密算法中添加自定义 key 再来做加密.
- import hashlib
- # ######## md5 ########
- hash = hashlib.md5(bytes('898oaFs09f',encoding="utf-8"))
- hash.update(bytes('admin',encoding="utf-8"))
- print(hash.hexdigest())
python 内置还有一个 hmac 模块, 它内部对我们创建 key 和 内容 进行进一步的处理然后再加密
- import hmac
- h = hmac.new(bytes('898oaFs09f',encoding="utf-8"))
- h.update(bytes('admin',encoding="utf-8"))
- print(h.hexdigest())
To be continue....
来源: http://www.bubuko.com/infodetail-2933045.html