Python学习—基础篇之常用模块

常用模块

模块,用一砣代码实现了某个功能的代码集合。 

类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.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模块

引入模块的方式

1 import module
2 import module.xxx as name
3 from module import xxx,xxx
4 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.几种时间形式的转换

 

 1 #一 时间戳<---->结构化时间:  localtime/gmtime   mktime
 2 
 3 time.localtime(3600*24)
 4 time.gmtime(3600*24)
 5 
 6 time.mktime(time.localtime())
 7 
 8 
 9 #字符串时间<---->结构化时间: strftime/strptime
10 
11 time.strftime("%Y-%m-%d %X", time.localtime())
12 time.strptime("2017-03-16","%Y-%m-%d")

 

 

1 time.asctime(time.localtime(312343423))
2 
3 time.ctime(312343423)

3.time & datetime常用操作

 1 #_*_coding:utf-8_*_
 2 __author__ = 'Alex Li'
 3 
 4 import time
 5 
 6 
 7 # print(time.clock()) #返回处理器时间,3.3开始已废弃 , 改成了time.process_time()测量处理器运算时间,不包括sleep时间,不稳定,mac上测不出来
 8 # print(time.altzone)  #返回与utc时间的时间差,以秒计算\
 9 # print(time.asctime()) #返回时间格式"Fri Aug 19 11:14:16 2016",
10 # print(time.localtime()) #返回本地时间 的struct time对象格式
11 # print(time.gmtime(time.time()-800000)) #返回utc时间的struc时间对象格式
12 
13 # print(time.asctime(time.localtime())) #返回时间格式"Fri Aug 19 11:14:16 2016",
14 #print(time.ctime()) #返回Fri Aug 19 12:38:29 2016 格式, 同上
15 
16 
17 
18 # 日期字符串 转成  时间戳
19 # string_2_struct = time.strptime("2016/05/22","%Y/%m/%d") #将 日期字符串 转成 struct时间对象格式
20 # print(string_2_struct)
21 # #
22 # struct_2_stamp = time.mktime(string_2_struct) #将struct时间对象转成时间戳
23 # print(struct_2_stamp)
24 
25 
26 
27 #将时间戳转为字符串格式
28 # print(time.gmtime(time.time()-86640)) #将utc时间戳转换成struct_time格式
29 # print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) ) #将utc struct_time格式转成指定的字符串格式
30 
31 
32 
33 
34 
35 #时间加减
36 import datetime
37 
38 # print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925
39 #print(datetime.date.fromtimestamp(time.time()) )  # 时间戳直接转成日期格式 2016-08-19
40 # print(datetime.datetime.now() )
41 # print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天
42 # print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天
43 # print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时
44 # print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分
45 
46 
47 #
48 # c_time  = datetime.datetime.now()
49 # print(c_time.replace(minute=3,hour=2)) #时间替换
View Code

random模块

 1 import random
 2 random.random()      # 大于0且小于1之间的小数 0.7664338663654585
 3 
 4 random.randint(1,5)  # 大于等于1且小于等于5之间的整数
 5 
 6 random.randrange(1,3) # 大于等于1且小于3之间的整数
 7 
 8 random.choice([1,'23',[4,5]])  # #1或者23或者[4,5]
 9 
10 random.sample([1,'23',[4,5]],2) # #列表元素任意2个组合 [[4, 5], '23']
11 
12 random.uniform(1,3) #大于1小于3的小数 1.6270147180533838
13 
14 item=[1,3,5,7,9]
15 random.shuffle(item) # 打乱次序 item[5, 1, 3, 7, 9]
16 random.shuffle(item) # item [5, 9, 7, 1, 3]
View Code
 1 # 随机生成验证码
 2 
 3 import random
 4 
 5 def v_code():
 6 
 7     code = ''
 8     for i in range(5):
 9 
10         num=random.randint(0,9)
11         alf=chr(random.randint(65,90))
12         add=random.choice([num,alf])
13         code="".join([code,str(add)])
14 
15     return code
16 
17 print(v_code())
随机生成验证码

hashlib模块

哈希算法(散列算法):通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示),常常用于对密码进行加密。hashlib模块主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 等加密算法。

 1 import hashlib
 2  
 3 # ######## md5 ########
 4 hash = hashlib.md5()
 5 # help(hash.update)
 6 hash.update(bytes('admin', encoding='utf-8'))
 7 print(hash.hexdigest())  #16进制格式hash
 8 print(hash.digest())  #2进制格式hash
 9  
10  
11 ######## sha1 ########
12  
13 hash = hashlib.sha1()
14 hash.update(bytes('admin', encoding='utf-8'))
15 print(hash.hexdigest())
16  
17 # ######## sha256 ########
18  
19 hash = hashlib.sha256()
20 hash.update(bytes('admin', encoding='utf-8'))
21 print(hash.hexdigest())
22  
23  
24 # ######## sha384 ########
25  
26 hash = hashlib.sha384()
27 hash.update(bytes('admin', encoding='utf-8'))
28 print(hash.hexdigest())
29  
30 # ######## sha512 ########
31  
32 hash = hashlib.sha512()
33 hash.update(bytes('admin', encoding='utf-8'))
34 print(hash.hexdigest())
View Code

以上加密算法虽然依然非常厉害,但时候存在缺陷,即:通过撞库可以反解。所以,有必要对加密算法中添加自定义key再来做加密。

1 import hashlib
2  
3 # ######## md5 ########
4  
5 hash = hashlib.md5(bytes('898oaFs09f',encoding="utf-8"))
6 hash.update(bytes('admin',encoding="utf-8"))
7 print(hash.hexdigest())

python内置还有一个 hmac 模块,它内部对我们创建 key 和 内容 进行进一步的处理然后再加密

1 import hmac
2  
3 h = hmac.new(bytes('898oaFs09f',encoding="utf-8"))
4 h.update(bytes('admin',encoding="utf-8"))
5 print(h.hexdigest())

 To be continue....

 

posted @ 2019-01-25 00:20  cdcx  阅读(230)  评论(0编辑  收藏  举报