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’)

    1time

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

          时间戳              197011日之后的秒,即: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)

    2datetime

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

    3sys

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

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
#####

    4os

       用于提供系统级别的操作

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所指向的文件或者目录的最后修改时间
\'\'\'

    5hashlib

       用于加密相关的操作,代替了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

    6pickle,json

       用于【python特有的类型】  python基本数据类型】间进行转换

       pickle模块提供了四个功能:dumpsdumploadsload

       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)

 

    7configparser模块

       用于对特定的配置文件进行操作

         [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

(c)2006-2024 SYSTEM All Rights Reserved IT常识