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

类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块。

如:os 是系统相关的模块;file是文件操作相关的模块

模块分为三种:

  • 自定义模块,文件或文件夹
  • 内置模块
  • 开源模块
 1 # python 安装第三方模块
 2 # 加入环境变量 : 右键计算机---属性---高级设置---环境变量---path--分号+python的scripts路径
 3 (1) python管理工具 pip
 4 # python3 -m pip install requests  # 3版本安装
 5  
 6  (2) 源码安装
 7     解压
 8     cmd
 9     进到你下载的包路径
10     python setup.py install #选择你要安装的Python版本。

windows下安装开源模块 

报错

1 pip install django                                                                  
2 Fatal error in launcher: Unable to create process using '"'

解决方法

1 python -m pip install package
 1 如果找不到pip命令可以去scripts目录下
 2  安装报错                                                                                     
 3 C:\Python35\Scripts                                                                   
 4 λ pyip install django                                                                 
 5 Fatal error in launcher: Unable to create process using '"'                           
 6                                                                                         
 7 C:\Python35\Scripts                                                                   
 8 λ pip install django                                                                  
 9 Fatal error in launcher: Unable to create process using '"' 
10  
11 解决 python -m pip install package
12  
13 C:\Python35\Scripts                                                                   
14 λ python -m pip install requests                                                      
15 Collecting requests                                                                   
16   Downloading requests-2.10.0-py2.py3-none-any.whl (506kB)                            
17     100% |████████████████████████████████| 507kB 144kB/s                             
18 Installing collected packages: requests                                               
19 Successfully installed requests-2.10.0                                                
20 You are using pip version 7.1.2, however version 8.1.2 is available.                  
21 You should consider upgrading via the 'python -m pip install --upgrade pip' command.                            
22                                                                                         
23 C:\Python35\Scripts                                                                   
24 λ piython -m pip install django                                                       
25 Collecting django                                                                     
26   Downloading Django-1.9.6-py2.py3-none-any.whl (6.6MB)                               
27     100% |████████████████████████████████| 6.6MB 64kB/s                              
28 Installing collected packages: django                                                 
29 Successfully installed django-1.9.6                                                   
30 You are using pip version 7.1.2, however version 8.1.2 is available.                  
31 You should consider upgrading via the 'python -m pip install --upgrade pip' command.  
32                                                                                         
33                                                  
34 C:\Python35\Scripts                                                                   
35 λ python3 -m pip install django                                                       
36 Collecting django                                                                     
37   Using cached Django-1.9.6-py2.py3-none-any.whl                                      
38 Installing collected packages: django                                                 
39 Successfully installed django-1.9.6                                                   
40 You are using pip version 7.1.2, however version 8.1.2 is available.                  
41 You should consider upgrading via the 'python -m pip install --upgrade pip' command.  

二 自定义模块

也就是自己写的python脚本,而目录就是所谓的包

1 定义模块

python基础-7模块,第三方模块安装方法,使用方法。sys.path os sys time datetime hashlib pickle json requests xml

 

 2 导入模块

Python之所以应用越来越广泛,在一定程度上也依赖于其为程序员提供了大量的模块以供使用,如果想要使用模块,则需要导入。导入模块有一下几种方法:

1 import module
2 from module.xx.xx import xx
3 from module.xx.xx import xx as rename
4 from module.xx.xx import *

2 .2 导入模块后如何调用

 1 第一种:
 2 from lib import account
 3 ret = account.login()  #  导入模块,这里方法调用必须用模块
 4 print(ret)
 5 第二种:
 6 from lib.account import login  #这里如果直接导入方法,需要包.模块
 7 ret = login()
 8 print(ret)
 9 第三种
10 import lib.account  #如果是直接import
11 ret = lib.account.login() #调用时候需要从头开始写
12 print(ret)
13 第四种:
14 from lib.account import login as l  #as使用
15 ret = l()
16 print(ret) 
17  
18  
19 account 文件
20 #!/usr/bin/env python
21 # _*_ coding:utf-8 _*_

23  
24 def login():
25     return "login"
26  
27 def register():
28     return "register"
29  
30 def logout():
31     return "logout"

3 模块默认查找路径

导入模块其实就是告诉Python解释器去解释那个py文件  

  • 导入一个py文件,解释器解释该py文件
  • 导入一个包,解释器解释该包下的 __init__.py 文件 【py2.7】

 

那么问题来了,导入模块时是根据那个路径作为基准来进行的呢?即:sys.path,根据sys.path下的路径去找。

 

 

1 import sys
2 print(sys.path)
3 
4 
5 
6 C:\Python35\python3.exe E:/py/55/learn-python/oldboy/6/mk.py
7 ['E:\\py\\55\\learn-python\\oldboy\\6', 
  'E:\\py\\55\\learn-python\\oldboy',
  'C:\\Python35\\python35.zip',
  'C:\\Python35\\DLLs',
  'C:\\Python35\\lib',
  'C:\\Python35',
  'C:\\Python35\\lib\\site-packages']

4 将某个路径加入到环境变量

如果sys.path路径列表没有你想要的路径,可以通过 sys.path.append('路径') 添加。

1 # 将d盘写的一个脚本加入到sys路径,这样D盘下面的py文件就可以作为模块直接用。
2 import sys
3 sys.path.append("D:")
4 import buy
5 ret = buy.fun()
6 print(ret)<br><br>
1 import sys
2 import os
3  
4 pre_path = os.path.abspath('../')
5 sys.path.append(pre_path)

三 内置模块

1 、os

用于提供系统级别的操作

 1 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
 2 os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
 3 os.curdir  返回当前目录: ('.')
 4 os.pardir  获取当前目录的父目录字符串名:('..')
 5 os.makedirs('dirname1/dirname2')    可生成多层递归目录
 6 os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
 7 os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname
 8 os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
 9 os.listdir('dirname')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 ls
10 os.remove()  删除一个文件 rm
11 os.rename("oldname","newname")  重命名文件/目录
12 os.stat('path/filename')  获取文件/目录信息,包含文件大小。
13 os.sep    输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
14 os.linesep    输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
15 os.pathsep    输出用于分割文件路径的字符串
16 os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
17 os.system("bash command")  运行shell命令,直接显示,模拟一个人的操作,
18 os.environ  获取系统环境变量
19 os.path.abspath(path)  返回path规范化的绝对路径
20 os.path.split(path)  将path分割成目录和文件名二元组返回
21 os.path.dirname(path)  返回path的目录。其实就是os.path.split(path)的第一个元素
22 os.path.basename(path)  返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
23 os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
24 os.path.isabs(path)  如果path是绝对路径,返回True
25 os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
26 os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
27 os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
28 os.path.getatime(path)  返回path所指向的文件或者目录的最后存取时间
29 os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
 1 #!/usr/bin/env python
 2 # _*_ coding:utf-8 _*_

 4 import os
 5  
 6 print(os.getcwd())
 7 # 测是 chdir 切换目录,切换到上级目录
 8 # pwd =os.getcwd()
 9 # li = pwd.split("\\")
10 # del li[-1]
11 # pwd='\\'.join(li)
12 # print(pwd)
13 # os.chdir(pwd)
14 # print(os.getcwd())
15  
16 print(os.curdir) # 返回.
17 a = os.pardir
18 print(a)  # 返回是..
19 # os.makedirs("a/b/c")
20 # os.makedirs("a/b")  #在本层目录下创建a/b
21 # os.removedirs("a/b") # b为空,删除b后,a也为空,则都删除 否则哪级不为空就会报错
22 # os.mkdir("b")  #创建目录
23 # print(os.listdir('a/b')) #列出目录内一层的内容包括隐藏目录
24 # os.remove('a/b/圣达菲.py') # 删除b下的文件
25 # os.rmdir("b")# 删除空目录 否则报错
26 # os.rename("a","b") # 重命名文件或者目录
27 # print(os.stat("b")) #获取目录信息
28 # print(os.sep) # 输出路径分隔符 linux / windows //
29 # print(os.linesep) #输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
30 # print(os.pathsep) #输出用于分割文件路径的字符串
31 # print(os.name) #输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
32 # os.system("ip ro") #必须在linux手动执行脚本
33 # print(os.environ) #获取环境变量
34 # print(os.path.abspath("b")) # # 获取b目录规范化的绝对路径
35 # print(os.path.split("b")) #将传入的字符串路径分割成目录和文件名二元数组返回 ('', 'b')
36 print(os.path.dirname("a/b")) #获取最后一个目录之前的路径
37 print(os.path.exists('/b/c')) #判断是否存在 返回True 或者false
38 print(os.path.basename('a/b/c')) #获取最后一层目录
39 print(os.path.isabs('a/b/c')) #是否是绝对路径
40 print(os.path.isfile('b/sss')) #最后一个名是否是文件 返回True 或者false
41 print(os.path.isdir('a/b'))#最后一个名是否是目录 返回True 或者false
42 print(os.path.join("a/b/c","b/b")) #a/b/c\b/b
43 print(os.path.getatime("a/b/c"))
44 print(os.path.getmtime("a/b/c"))

案例:

根据用户输入创建目录

1 import os,sys
2 dirname = input("input ur dir name:").strip()
3 dir_path = os.getcwd() #获取当前脚本所在目录
4 new_path = r"%s\%s"%(dir_path,dirname) #拼接输入名与目录路径
5 if not os.path.exists(new_path):
6     os.mkdir(new_path)

os 模块常用 功能 dirname basename join

这里先介绍 内置函数vars()

每个py文件相当于一个模块,而这个文件的许多方法,可以用print(var())

1 print(vars())
2 
3 -----------------
4 C:\Python35\python3.exe E:/py/55/learn-python/oldboy/6/module_test2.py
5 {'__name__': '__main__', '__cached__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000226A98E5BE0>, '__doc__': None, '__builtins__': <module 'builtins' (built-in)>, '__spec__': None, '__file__': 'E:/py/55/learn-python/oldboy/6/module_test2.py', '__package__': None}

__doc__ #py文件开头的注释文字

__file__ #当前py文件的路径

__package__ #包含文件所在包,用 . 分隔,当前文件为None,导入的其他文件:指定文件所在包,用.分隔。

__cached__ #文件的缓存

      #当前文件没有,导入的其他文件有缓存

__name__ #如果是主文件,__name__==__main__,否则,等于模块名。用作执行的条件判断。

1、主文件

调用主函数前 ,必须加判断。if __name__==__main__:

2、__file__

当前文件的路径,

返回当前文件的目录

 1 print(__doc__) # python文件的注释 三引号 注释必须在开头,
 2  
 3 print(__file__) #自身脚本文件加路径
 4 print(__package__) # 当前文件为None
 5 from s12_mokuai import s1
 6 print(s1.__package__) # 导入模块文件的文件: 则输出导入模块文件的所在目录
 7  
 8 #
 9 # from s12_mokuai import s1
10 # print(s1.__cached__) #导入的文件,则输出其缓存目录
1 print(__cached__)    #没有导入 当前文件的缓存为None,

文件路径及目录,获取文件名等等操作

 1 import os
 2 print(__file__)#文件的路径
 3 print(os.path.dirname(__file__))#返回文件的目录,文件的上层
 4 print(os.path.dirname(os.path.dirname(__file__)))#上层的上层
 5 print(os.path.basename(__file__))#返回文件名
 6 
 7 --------------------------
 8 
 9 C:\Python35\python3.exe E:/py/55/learn-python/oldboy/6/module_test2.py
10 E:/py/55/learn-python/oldboy/6/module_test2.py
11 E:/py/55/learn-python/oldboy/6
12 E:/py/55/learn-python/oldboy
13 module_test2.py

重点1 而 __name__的重要性不言而喻

当我们的程序只有一个入口的时候,如果加入if __name__ == "__main__": 那么我们程序主文件被导入的时候__name__的值是模块的名字,程序主程序是不执行的。

1 print(__name__) # 当执行该脚本时候输出为 __main__ 而当被导入的时候是其模块名称
# 主文件
# 调用主函数前,必须 if __name__ == "__main__":

重点2 __file__  #自身脚本文件加路径

假如当前脚本所在目录还有一个目录,python里面称为包,而这个包下有好多模块,也就是py文件,我们如果想调用,怎么用呢??这就用到os模块的 三个方法basename dirname join 还有我们刚提到的__file__  还有 sys的path方法

1 import os,sys
2 print(os.path.dirname(__file__))
3 p1 = os.path.dirname(__file__)#返回文件的目录,文件的上层
4 p2 = os.path.basename(__file__)#返回文件的文件名
5 new_dir = os.path.join(p1,p2)#拼接成路径
6 sys.path.append(new_dir)#加入到sys.path

 2、sys

用于提供对解释器相关的操作

1 sys.argv           命令行参数List,第一个元素是程序本身路径
2 sys.exit(n)        退出程序,正常退出时exit(0)
3 sys.version        获取Python解释程序的版本信息
4 sys.maxint         最大的Int值
5 sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
6 sys.platform       返回操作系统平台名称
7 sys.stdout.write('please:')
8 val = sys.stdin.readline()[:-1]

2.1 argv 将文件名和参数做成列表返回

1 import sys
2 print(sys.argv)
3  
4 saltstack_s:/share/py_test/s8 #  py s9_argv.py 9 9 9 9
5 ['s9_argv.py', '9', '9', '9', '9']

sys.stdout.write()

sys.stdout.flush()刷新屏幕缓存io

1 #进度条案例
2 import time,sys
3 for i in range(101):
4    #显示进度条百分比  #号从1开始 空格从99递减
5    hashes = '#' * int(i / 100.0 * 100)
6    spaces = ' ' * (100 - len(hashes))
7    sys.stdout.write("\r[%s] %s%%" % (hashes + spaces, i))  #必须两个%%才是,因为一个%是取模,python解释器会默认过滤
8    sys.stdout.flush() #强制刷新屏幕缓冲区使其一行输出
9    time.sleep(0.05)
1 import time
2 import sys
3 for i in range(30):
4    sys.stdout.write('\r')
5    sys.stdout.write("%s%%|%s" % (int(i/30*100),int(i/30*100)*"*"))
6    sys.stdout.flush()
7    time.sleep(0.3)

3 time datatime模块

时间相关的操作,时间有三种表示方式:

  • 时间戳               1970年1月1日之后的秒,即:time.time()
  • 格式化的字符串    2014-11-11 11:11,    即:time.strftime('%Y-%m-%d')
  • 结构化时间          元组包含了:年、日、星期等... time.struct_time    即:time.localtime()
 1 print time.time()  # 时间戳  1970年1月1日开始计时   unix系统诞生 1463840728.7381186
 2 print time.mktime(time.localtime()) #mktime 接收结构化的对象时间  转换为时间戳 1463470373.0
 3    
 4 print time.gmtime()    #可加时间戳参数 # 结构化UTC时间返回 元组返回   年、日、星期 time.struct_time(tm_year=2016, tm_mon=5, tm_mday=17, tm_hour=7, tm_min=26, tm_sec=11, tm_wday=1, tm_yday=138, tm_isdst=0)
 5 print time.localtime() #可加时间戳参数  #结构化计算机本地时间返回  time.struct_time(tm_year=2016, tm_mon=5, tm_mday=17, tm_hour=15, tm_min=31, tm_sec=26, tm_wday=1, tm_yday=138, tm_isdst=0)
 6 print time.strptime('2014-11-11', '%Y-%m-%d')  print(time.strftime("%Y-%m-%d %H:%M",time.gmtime()))  #   2016-05-21 14:25
 7    
 8 print time.strftime('%Y-%m-%d') #默认当前时间
 9 print time.strftime('%Y-%m-%d',time.localtime()) #默认当前时间
10 print time.asctime()
11 print time.asctime(time.localtime())
12 print time.ctime(time.time())
13    
14 import datetime
15 '''
16 datetime.date:表示日期的类。常用的属性有year, month, day
17 datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond
18 datetime.datetime:表示日期时间
19 datetime.timedelta:表示时间间隔,即两个时间点之间的长度
20 timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
21 strftime("%Y-%m-%d")
22 '''
23 import datetime
24 print datetime.datetime.now()
25 print datetime.datetime.now() - datetime.timedelta(days=5)

 

3.1 time 模块练习

python基础-7模块,第三方模块安装方法,使用方法。sys.path os sys time datetime hashlib pickle json requests xml

 python基础-7模块,第三方模块安装方法,使用方法。sys.path os sys time datetime hashlib pickle json requests xml

时间戳与日期之间的相互转化

 1 当前时间戳:time.time()
 2 当前日期:time.ctime()
 3 1、Python下日期到时间戳的转换
 4 import datetime
 5 import time
 6 dateC=datetime.datetime(2010,6,6,8,14,59)
 7 timestamp=time.mktime(dateC.timetuple())
 8 print timestamp
 9  
10 2、Python下将时间戳转换到日期
11 import datetime
12 import time
13 ltime=time.localtime(1395025933)
14 timeStr=time.strftime("%Y-%m-%d %H:%M:%S", ltime)

 

 1 #!/usr/bin/env python
 2 # _*_ coding:utf-8 _*_
 3 __author__ = 'liujianzuo'
 4 import  time
 5 """
 6 时间相关的操作,时间有三种表示方式:
 7  
 8 时间戳               1970年1月1日之后的秒,即:time.time()
 9 格式化的字符串    2014-11-11 11:11,    即:time.strftime('%Y-%m-%d')
10 结构化时间          元组包含了:等... time.struct_time    即:time.localtime()
11 """
 1 ##################   时间戳 与  结构化时间 转换    ######################
 2 print(time.time()) # 时间戳  1970年1月1日开始计时   unix系统诞生 1463840728.7381186
 3 print(time.ctime()) # 周 月 日  时间 年   Sat May 21 22:25:28 2016
 4 print(time.ctime(time.time())) # 转换时间戳 为 Sat May 21 22:25:28 2016
 5 print(time.ctime(time.time() - 86400))  # 转换时间戳 为 Sat May 21 22:25:28 2016
 6  
 7 print(time.gmtime()) # 结构化UTC时间返回 元组返回   年、日、星期 time.struct_time(tm_year=2016, tm_mon=5, tm_mday=17, tm_hour=7, tm_min=26, tm_sec=11, tm_wday=1, tm_yday=138, tm_isdst=0)
 8 obj = time.gmtime()
 9 print(obj.tm_year) #获取结构化的时间年 2016
10 print(time.localtime()) #结构化计算机本地时间返回  time.struct_time(tm_year=2016, tm_mon=5, tm_mday=17, tm_hour=15, tm_min=31, tm_sec=26, tm_wday=1, tm_yday=138, tm_isdst=0)
11 #结构化时间 转换 时间戳
12  
13 print(time.mktime(time.localtime())) #mktime 接收结构化的对象时间  转换为时间戳 1463470373.0
14 ################## ################## ################## ##################
15  
16 ##################   结构化时间 与  字符串时间转换    ######################
17 #将结构化的对象时间转换为字符串 trftime    即:time.struct_time(tm_year=2016, tm_mon=5,。。。) ===转换为=》 ”%Y-%m-%d %H:%M %s# “
18 print(time.strftime("%Y-%m-%d %H:%M",time.gmtime()))  #   2016-05-21 14:25
19 #将字符串日期 转换为 时间结构对象 strptime    ”%Y-%m-%d %H:%M %s# “ ===转换为=》 time.struct_time(tm_year=2016, tm_mon=5,。。。)
20 print(time.strptime("2016-09-10 10:11","%Y-%m-%d %H:%M"))  #  time.struct_time(tm_year=2016, tm_mon=5, tm_mday=17, tm_hour=15,
21 ################## ################## ################## ##################

3.2 datetime 模块练习

 1 import datetime
 2 '''
 3 datetime.date:表示日期的类。常用的属性有year, month, day
 4 datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond
 5 datetime.datetime:表示日期时间
 6 datetime.timedelta:表示时间间隔,即两个时间点之间的长度
 7 timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
 8 strftime("%Y-%m-%d")
 9 '''
10 import datetime
11 print datetime.datetime.now()
12 print datetime.datetime.now() - datetime.timedelta(days=5)
  1 # -*- coding: utf-8 -*-
  2  
  3  
  4  #datetime类
  5  #datetime是date与time的结合体,包括date与time的所有信息。
  6  #它的构造函数如下:
  7  #datetime. datetime (year, month, day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] )
  8  #各参数的含义与date、time的构造函数中的一样,要注意参数值的范围。
  9  
 10  
 11  
 12  
 13 # 1. datetime类定义的类属性与方法:
 14 #datetime.min、datetime.max:datetime所能表示的最小值与最大值;
 15 #print: datetime.max: 9999-12-31 23:59:59.999999
 16 #print: datetime.min: 0001-01-01 00:00:00
 17 from  datetime  import  *
 18 import time
 19 print   'datetime.max:' , datetime.max 
 20 print   'datetime.min:' , datetime.min 
 21 #datetime.resolution:datetime最小单位;
 22 #print: datetime.resolution: 0:00:00.000001
 23 print   'datetime.resolution:' , datetime.resolution
 24 #datetime.today():返回一个表示当前本地时间的datetime对象;
 25 #print: today(): 2012-09-12 19:37:50.721000
 26 print   'today():' , datetime.today()
 27 #datetime.now([tz]):返回一个表示当前本地时间的datetime对象,如果提供了参数tz,则获取tz参数所指时区的本地时间;
 28 #print: now(): 2012-09-12 19:37:50.738000
 29 print   'now():' , datetime.now()
 30 #datetime.utcnow():返回一个当前utc时间的datetime对象;
 31 #print: 2012-09-12 11:37:50.739000
 32 print   'utcnow():' , datetime.utcnow() 
 33 #datetime.fromtimestamp(timestamp[, tz]):根据时间戮创建一个datetime对象,参数tz指定时区信息;
 34 #print: fromtimestamp(tmstmp): 2012-09-12 19:37:50.741000
 35 print   'fromtimestamp(tmstmp):' , datetime.fromtimestamp(time.time())
 36 #datetime.utcfromtimestamp(timestamp):根据时间戮创建一个datetime对象;
 37 #print: utcfromtimestamp(tmstmp): 2012-09-12 11:37:50.742000
 38 print   'utcfromtimestamp(tmstmp):' , datetime.utcfromtimestamp(time.time())
 39 #datetime.combine(date, time):根据date和time,创建一个datetime对象;
 40 #print: datetime.combine(date,time):  2012-09-12 19:46:05
 41 d = date(2012,9,12)
 42 from  datetime  import  *
 43 t = time(19,46,5)
 44 print 'datetime.combine(date,time): ',datetime.combine(d,t)
 45 #datetime.strptime(date_string, format):将格式字符串转换为datetime对象;
 46 #print: 2007-03-04 21:08:12
 47 print datetime.strptime("2007-03-04 21:08:12", "%Y-%m-%d %H:%M:%S")
 48  
 49  
 50 #2. datetime类提供的实例方法与属性
 51 dt = datetime.strptime("2012-09-12 21:08:12", "%Y-%m-%d %H:%M:%S")
 52 #print: 2012 9 12 21 8 12 0 None
 53 print dt.year,dt.month,dt.day,dt.hour,dt.minute,dt.second,dt.microsecond,dt.tzinfo
 54 print dt.date()
 55 print dt.time()
 56 print dt.replace(year = 2013)
 57 print dt.timetuple()
 58 print dt.utctimetuple()
 59 print dt.toordinal()
 60 print dt.weekday()
 61 print dt.isocalendar()
 62 #print dt.isoformat([sep])
 63 #datetime. ctime ():返回一个日期时间的C格式字符串,等效于time.ctime(time.mktime(dt.timetuple()));
 64  
 65  
 66 #3. 格式字符串
 67 # datetime. strftime (format)
 68 # %a 星期的简写。如 星期三为Web
 69 # %A 星期的全写。如 星期三为Wednesday
 70 # %b 月份的简写。如4月份为Apr
 71 # %B月份的全写。如4月份为April
 72 # %c:  日期时间的字符串表示。(如: 04/07/10 10:43:39)
 73 # %d:  日在这个月中的天数(是这个月的第几天)
 74 # %f:  微秒(范围[0,999999])
 75 # %H:  小时(24小时制,[0, 23])
 76 # %I:  小时(12小时制,[0, 11])
 77 # %j:  日在年中的天数 [001,366](是当年的第几天)
 78 # %m:  月份([01,12])
 79 # %M:  分钟([00,59])
 80 # %p:  AM或者PM
 81 # %S:  秒(范围为[00,61],为什么不是[00, 59],参考python手册~_~)
 82 # %U:  周在当年的周数当年的第几周),星期天作为周的第一天
 83 # %w:  今天在这周的天数,范围为[0, 6],6表示星期天
 84 # %W:  周在当年的周数(是当年的第几周),星期一作为周的第一天
 85 # %x:  日期字符串(如:04/07/10)
 86 # %X:  时间字符串(如:10:43:39)
 87 # %y:  2个数字表示的年份
 88 # %Y:  4个数字表示的年份
 89 # %z:  与utc时间的间隔 (如果是本地时间,返回空字符串)
 90 # %Z:  时区名称(如果是本地时间,返回空字符串)
 91 # %%:  %% => %
 92  
 93  
 94 dt = datetime.now()
 95 #print: (%Y-%m-%d %H:%M:%S %f):  2012-09-12 23:04:27 145000
 96 print '(%Y-%m-%d %H:%M:%S %f): ', dt.strftime('%Y-%m-%d %H:%M:%S %f')
 97 #print: (%Y-%m-%d %H:%M:%S %p):  12-09-12 11:04:27 PM
 98 print '(%Y-%m-%d %H:%M:%S %p): ', dt.strftime('%y-%m-%d %I:%M:%S %p')
 99 #print: %a: Wed
100 print '%%a: %s ' % dt.strftime('%a')
101 #print: %A: Wednesday
102 print '%%A: %s ' % dt.strftime('%A')
103 #print: %b: Sep
104 print '%%b: %s ' % dt.strftime('%b')
105 #print: %B: September
106 print '%%B: %s ' % dt.strftime('%B')
107 #print: 日期时间%c: 09/12/12 23:04:27
108 print '日期时间%%c: %s ' % dt.strftime('%c')
109 #print: 日期%x:09/12/12
110 print '日期%%x:%s ' % dt.strftime('%x')
111 #print: 时间%X:23:04:27
112 print '时间%%X:%s ' % dt.strftime('%X')
113 #print: 今天是这周的第3天
114 print '今天是这周的第%s天 ' % dt.strftime('%w')
115 #print: 今天是今年的第256天
116 print '今天是今年的第%s天 ' % dt.strftime('%j')
117 #print: 今周是今年的第37周
118 print '今周是今年的第%s周 ' % dt.strftime('%U')

4 hashlib

用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法

 

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

加盐

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

1 ######## md5 加盐########
2 
3 hash = hashlib.md5(bytes("salt;%#%salt",encoding="utf-8"))
4 
5 hash.update(bytes("admin",encoding="utf-8"))
6 print(hash.hexdigest())
1 obj = hashlib.md5(bytes("salt;%#%salt", encoding="utf-8"))  # 这里是输入的盐值  ##创建hash对象,md5:(message-Digest Algorithm 5)消息摘要算法,得出一个128位的密文
2 print(obj)  # <md5 HASH object @ 0x0000000000A1F800>
3 obj.update(bytes("mypasswd123", encoding="utf-8"))  # 更新哈希对象以字符串参数 其实就是你的明文密码
4 print(obj.digest())  ##返回摘要,作为二进制数据字符串值  b'\x04\x80)\x17\\\xf8dPA\xbc\xd9@e\xeb&\x0f'
5 print(obj.hexdigest())  # 返回十六进制数字字符串  048029175cf8645041bcd94065eb260f

HMAC加密:

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

消息认证算法:MAC (Message Authentication Codes)  消息认证码

1 import hmac
2 h = hmac.new('wupeiqi')
3 h.update('hellowo')
4 print h.hexdigest()
 1  对称加密:
 2         加密算法 + 口令
 3             明文 --> 密文
 4  
 5             字典攻击
 6  
 7             20位:100^20=10^32
 8  
 9             加密方,解密方使用同一个口令
10  
11             加密算法:
12                 DES:56位    2003 被电子边境委员会组织3个小时轻松破解所有des
13                 AES:128位  高级加密标准
14                 3DES:3次加密后的
15  
16             加密方,解密方使用同一个口令
17             DES(56bits), 3DES, AES(128bits), Blowfish
18             Twofish, IDEA, RC6, CAST5, Serpent
19  
20             block
21  
22             特性:1、加密/解密使用同一口令
23                   2、将原文分割成固定大小的数据块,对这些进行加密
24                       ECB, CBC
25 密钥交换(IKE: Internet Key Exchange):DH算法   发明者两个人的名字首字母
26  
27     非对称加密:  :本地生成一对钥匙,公钥私钥,公钥是可以公开的,私钥是自己的。跟别人通信,就把对方的公钥要过来,加密完,只有对方才能解开。
28         由于加密太长,所以不用来加密数据。用对称密码加密数据,用非对称密码的钥匙加密身份
29  
30         加密算法:RSA, EIGamal, DSA
31  
32         1、密钥交换
33         2、身份认证
34     单向加密:
35         抽取数据特征码:
36             MD5, SHA1, SHA512, CRC-32(循环冗余校验码)
37  
38         1、完整性
39  
40         消息认证算法:MAC (Message Authentication Codes)  消息认证码
41             CBC-MAC
42             HMAC:
43  
44             雪崩效应:
45             定长输入:
46  
47  
48  
49 数据加密: 抽取数据特征码用单向加密,再用非对称加密特征码,加在数据前面,然后在用对称加密,然后再用对方的公钥加密数据。发送出去。
加密介绍

相关文章:

  • 2022-12-23
  • 2022-03-05
  • 2022-12-23
  • 2022-12-23
  • 2021-12-16
  • 2022-01-29
  • 2021-09-21
  • 2022-12-23
猜你喜欢
  • 2021-12-21
  • 2022-12-23
  • 2021-08-08
  • 2022-12-23
  • 2021-04-20
  • 2022-12-23
相关资源
相似解决方案