Python全栈开发day7
Posted Shaw Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python全栈开发day7相关的知识,希望对你有一定的参考价值。
一、Python生成器/迭代器
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/bin/env python # -*- coding:utf-8 -*- def shaw(n): start = 0 while True : if start > n: return yield start # yield生成数据 start + = 1 for i in shaw( 10 ): # for循环就为一个迭代器,访问数据(通过next一次一次去取) print (i) |
二、Python常用模块
a.自定义模块,第三方模块,内置模块
b.内置模块是Python自带的功能,在使用内置模块相应的功能时,需要【先导入】再【使用】
c.模块的搜索路径(优先搜索当前路径),接着查找初始化时使用python path环境变量的值
d.模块导入方法:
import 模块名
import module
from module.xx.xx import xx
from module.xx.xx import xx as rename
from module.xx.xx import *
e.添加模块路径
sys.path.append(‘path’)
1、time
时间相关的操作,时间有三种表示方式:
时间戳 1970年1月1日之后的秒,即:time.time()
格式化的字符串 2014-11-11 11:即:time.strftime(\'%Y-%m-%d\')
结构化时间 元组包含了:年、日、星期等...time.struct_time 即:time.localtime()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
>>> import time >>> time.time() # 1970年1月1日到现在经过的秒 1466993850.1074505 >>> time.ctime() # 当前日期时间(字符串格式) \'Mon Jun 27 10:22:24 2016\' >>> time.gmtime() # 格式化获取当前日期时间 time.struct_time(tm_year = 2016 , tm_mon = 6 , tm_mday = 27 , tm_hour = 2 , tm_min = 23 , tm_sec = 47 , tm_wday = 0 , tm_yday = 179 , tm_isdst = 0 ) >>> cuur = time.gmtime() >>> print ( \'%s-%s-%s\' % (cuur.tm_year,cuur.tm_mon,cuur.tm_mday)) 2016 - 6 - 27 >>> time.strftime( \'%Y-%m-%d\' ) # 格式化当前日期 \'2016-06-27\' >>> time.strftime( \'%Y-%m-%d %H:%M:%S\' ) \'2016-06-27 10:26:01\' >>> time.strptime( \'2016-06-12\' , \'%Y-%m-%d\' ) # 将字符串格式转换成struct_time格式 time.struct_time(tm_year = 2016 , tm_mon = 6 , tm_mday = 12 , tm_hour = 0 , tm_min = 0 , tm_sec = 0 , tm_wday = 6 , tm_yday = 164 , tm_isdst = - 1 ) |
2.datetime
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
>>> import datetime \'\'\' datetime.date:表示日期的类。常用的属性有year, month, day datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond datetime.datetime:表示日期时间 datetime.timedelta:表示时间间隔,即两个时间点之间的长度 timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]]) strftime("%Y-%m-%d") \'\'\' >>> s = datetime.datetime.now() # 获取当前时间 >>> s.strftime( \'%Y-%m-%d %H:%M:%S\' ) \' 2016 - 06 - 27 10 : 29 : 37 >>> s.strftime( \'%x\' ) # 获取当前日期 \'06/27/16\' >>> s = datetime.date.today() >>> print (s) 2016 - 06 - 27 >>> s.strftime( \'%X\' ) # 获取当前时间 \'00:00:00\' >>> s.strftime( \'%w\' ) # 获取今天是这周的第几天 \'1\' >>> s.strftime( \'%U\' ) # 获取本周是今年的第几周 \'26\' >>> s.strftime( \'%j\' ) # 获取今天是今年的第几天 \'179\' >>> s = datetime.datetime.now() - datetime.timedelta(days = 10 ) # 比现在少十天 >>> print (s) 2016 - 06 - 17 10 : 40 : 32.001361 >>> s = datetime.datetime.now() - datetime.timedelta(hours = 10 ) # 比现在少十小时 >>> print (s) 2016 - 06 - 27 00 : 41 : 26.448903 |
3.sys
用于提供对解释器相关的操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
import sys \'\'\' sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sys.maxint 最大的Int值 sys.path 返回模块搜索路径(优先搜索当前路径),初始化时使用PYTHON环境变量的值 sys.platform 返回操作系统平台名称(windows为win32) sys.stdout 输出到屏幕相关 \'\'\' # 输出进度条 import sys,time for i in range ( 5 ): sys.stdout.write( \'#\' ) time.sleep( 0.5 ) sys.stdout.flush() C:\\Python35\\python.exe H: / PyCharm / Python / PY_learn / lx3.py ##### |
4.os
用于提供系统级别的操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
\'\'\' os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd os.curdir 返回当前目录: (\'.\') os.pardir 获取当前目录的父目录字符串名:(\'..\') os.makedirs(\'dirname1/dirname2\') 可生成多层递归目录 os.removedirs(\'dirname1\') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 os.mkdir(\'dirname\') 生成单级目录;相当于shell中mkdir dirname os.rmdir(\'dirname\') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname os.listdir(\'dirname\') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 os.remove() 删除一个文件 os.rename("oldname","newname") 重命名文件/目录 os.stat(\'path/filename\') 获取文件/目录信息 os.sep 输出操作系统特定的路径分隔符,win下为"\\\\",Linux下为"/" os.linesep 输出当前平台使用的行终止符,win下为"\\t\\n",Linux下为"\\n" os.pathsep 输出用于分割文件路径的字符串 os.name 输出字符串指示当前使用平台。win->\'nt\'; Linux->\'posix\' os.system("bash command") 运行shell命令,直接显示 os.environ 获取系统环境变量 os.path.abspath(path) 返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组返回 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 os.path.basename(path) 返回path最后的文件名。如何path以/或\\结尾,那么就会返回空值。即os.path.split(path)的第二个元素 os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False os.path.isabs(path) 如果path是绝对路径,返回True os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间 \'\'\' |
5.hashlib
用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
>>> import hashlib ######## md5加密:(不能反解) ######## >>> ret = hashlib.md5() >>> ret.update(bytes( \'admin\' , encoding = \'utf-8\' )) >>> print (ret.hexdigest()) # md5加密后数据 21232f297a57a5a743894a0e4a801fc3 >>> print (ret.digest()) b \'!#/)zW\\xa5\\xa7C\\x89J\\x0eJ\\x80\\x1f\\xc3\' ######## sha1加密 ######## >>> ret = hashlib.sha1() >>> ret.update(bytes( \'admin\' , encoding = \'utf-8\' )) >>> print (ret.hexdigest()) d033e22ae348aeb5660fc2140aec35850c4da997 ######## sha256加密 ######## >>> ret = hashlib.sha256() >>> ret.update(bytes( \'admin\' , encoding = \'utf-8\' )) >>> print (ret.hexdigest()) 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 ######## sha384加密 ######## >>> ret = hashlib.sha384() >>> ret.update(bytes( \'admin\' , encoding = \'utf-8\' )) >>> print (ret.hexdigest()) 9ca694a90285c034432c9550421b7b9dbd5c0f4b6673f05f6dbce58052ba20e4248041956ee8c9a2ec9f10290cdc0782 ######## sha512加密 ######## >>> ret = hashlib.sha512() >>> ret.update(bytes( \'admin\' , encoding = \'utf-8\' )) >>> print (ret.hexdigest()) c7ad44cbad762a5da0a452f9e854fdc1e0e7a52a38015f23f3eab1d80b931dd472634dfac71cd34ebc35d16ab7fb8a90c81f975113d6c7538dc69dd8de9077ec |
以上加密算法虽然依然非常厉害,但时候存在缺陷,即:通过撞库可以反解。所以,有必要对加密算法中添加自定义key再来做加密
1
2
3
4
5
|
>>> import hashlib >>> ret = hashlib.md5(bytes( \'898oaFs09f\' ,encoding = "utf-8" )) >>> ret.update(bytes( \'admin\' ,encoding = "utf-8" )) >>> print (ret.hexdigest()) 67929daefab29024d18340945036e291 |
Python内置还有一个 hmac 模块,它内部对我们创建 key 和 内容 进行进一步的处理然后再加密
1
2
3
4
5
|
>>> import hmac >>> ret = hmac.new(bytes( \'898oaFs09f\' ,encoding = "utf-8" )) >>> ret.update(bytes( \'admin\' ,encoding = "utf-8" )) >>> print (ret.hexdigest()) 17186c513df61e8b3fb4a134f474b130 |
6.pickle,json
用于【python特有的类型】 和 【python基本数据类型】间进行转换
pickle模块提供了四个功能:dumps、dump、loads、load
pickle.dumps将数据通过特殊的形式转换为只有python语言认识的字符串
pickle.dump将数据通过特殊的形式转换为只有python语言认识的字符串,并写入文件
pickle.loads用于将形似字典,列表,元祖样式的字符串,转换成字典,列表,元祖(其中字典等样式的字符创必须用双引号扩起来)
pickle.load 直接读取文件内容(无需f.read),并把读取的内容转换成字典,列表等格式
1
2
3
4
|
import pickle data = { \'k1\' : 123 , \'k2\' : 456 } ret = pickle.dumps(data) print (ret) |
7.configparser模块
用于对特定的配置文件进行操作
[shangwu_WIFI]
manageip:192.168.0.52
SSID:shenfu-shangwu
manageuser:admin
passwd:ShenFu987Pay
[caiwu_WIFI]
manageip:192.168.0.53
SSID:shenfu-caiwu
manageuser:admin
passwd:ShenFu987Pay
[zong_WIFI]
manageip:192
SSID:shenfu-boss
manageuser:admin/shaw
passwd:ShenFu987Pay/Shawit12#$
实例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|