本节大纲:

1、模块讲解

2、hashlib and hmac

3、random

4、shelve

5、shutil

6、time and datetime

7、os and sys

8、re

9、xml

10、ConfigParser

1、模块讲解

定义:用一砣代码实现了某个功能的代码集合

导入方式:

  import module_text
  from module import module_text
  from module import module_text as MT
  from . import module_text

import本质:

  导入模块的本质就是把python文件解释一遍
  导入包的本质就是去执行/解释包下的__init__.py文件

2、hashlib and hmac(文件加密)

hashlib主要提供SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法,越大保密性越强,但是效率越低

hmac 提供key-value的加密方法

####加密方式不是一行一行加密,而是一起加密

--------------------------------------------

import hashlib
m = hashlib.md5()
m.update(b'hello')
print(m.hexdigest())
m.update(b'world')
等于:
m.update(b'helloworld')
print(m.hexdigest())

m2 = hashlib.sha256
m.update('如果这都不算爱'.encode('utf-8'))                     #如果需要加密中文,需要encode()

2) hmac

import hmac
h = hmac.new(b'hello')
h.update(b'world')
print(h.hexdigest())
等于:
h = hmac.new(b'hello',b'world')
print(h.hexdigest())

3、random(随机数)

random.random() # 随机出现从0到1之前的数字
random.randrange(x,y) # 随机出现从x到y不包括y之间的整数
random.uniform(x,y) # 随机出现x到y之间的浮点数
random.randint(x,y) # 随机出现x到y之间的整数包括xy
random.choice() #从序列中随机出现里面的值 
random.sample(‘序列’,‘count’) # 随机出现序列中count个数的值
random.shuffle() # 打乱序列的数值

----------------------验证码程序------------------

def check_mk(n):
  check_code = ''
  for i in range(n):
    current = random.randrange(n)
    if i == current:
      tmp = random.randint(0,9)
    else:
      tmp = chr(random.randint(65,90))
    check_code += str(tmp)
  return check_code

4、shelve

shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式

---------------------shelve模块-----------------------

list = [1,2,3,4]
name = 'lili'
age = '22' h = shelve.open('shelve_test1')
h['name'] = name
h['list'] = list
h['age'] = age h.close() c = shelve.open('shelve_test1')
print(c['name'])

5、shutil

高级的 文件、文件夹、压缩包 处理模块

shutil.copyfileobj(f1,f2) #复制文件,需要先open文件
shutil.copyfile(src, dst) # 复制文件,不需要打开文件
shutil.copymode(src, dst) #复制权限
shutil.copy(src, dst) #复制文件和权限
shutil.copy2(src, dst) #复制文件和状态
shutil.copytree(path,path1) # 递归复制目录
shutil.rmtree(path,path1) # 递归删除目录
shutil.make_achieve() # 文件压缩

6、time and datetime

时间模块:time,datetime
1、time
时间获取方式:1、时间戳(timestamp) 2、元组(struct_time) 3、格式化字符串(format string)
2、datetime
(1)、时间加减

time:

time.gmtime() # 返回以元组形式的UTC时间
time.localtime() # 返回以元组形式的当时时间
time.time() # 返回当时时间的时间戳
time.mktime() # 将元组形式的
time.strftime() # 将元组转换成格式化字符串
time.strptime() #将格式化字符串转换成元组
time.asctime() # 将元组转换成固定格式的字符串
time.ctime() #将时间戳转换成固定格式的字符串

  • %y 两位数的年份表示(00-99)
  • %Y 四位数的年份表示(000-9999)
  • %m 月份(01-12)
  • %d 月内中的一天(0-31)
  • %H 24小时制小时数(0-23)
  • %I 12小时制小时数(01-12)
  • %M 分钟数(00=59)
  • %S 秒(00-59)
  • %a 本地简化星期名称
  • %A 本地完整星期名称
  • %b 本地简化的月份名称
  • %B 本地完整的月份名称
  • %c 本地相应的日期表示和时间表示
  • %j 年内的一天(001-366)
  • %p 本地A.M.或P.M.的等价符
  • %U 一年中的星期数(00-53)星期天为星期的开始
  • %w 星期(0-6),星期天为星期的开始
  • %W 一年中的星期数(00-53)星期一为星期的开始
  • %x 本地相应的日期表示
  • %X 本地相应的时间表示
  • %Z 当前时区的名称
  • %% %号本身  

datetime:时间加减

print(datetime.datetime.now()) #以字符串方式打印当前时间
print(datetime.datetime.now() + datetime.timedelta(3)) #打印三天后的时间
print(datetime.datetime.now() + datetime.timedelta(hours = -3)) # 打印三小时前的时间
print(datetime.datetime.now() + datetime.timedelta(minutes = 30)) # 打印30分钟后的时间

7、os and sys

os:

os.getcwd() # 获取当前目录路径
os.chdir() # 改变当前路径
print(os.curdir) # 相对路径 ‘.’
print(os.pardir) # 相对上级路径 ‘..’
os.makedirs(路径)#递归创建目录
os.removedirs(路径)#递归删除空目录
os.mkdir(路径) # 创建目录,如果上一级不存在,则报错
os.rmdir(路径) # 删除空文件
os.listdir(路径) # 显示当前目录下的内容
os.stat(路径) # 获取目录\文件信息
os.sep # 输出当前系统的路径分隔符
os.linesep # 输出当前系统的换行符
os.pathsep # 输出当前系统的不同路径的分隔符
os.environ # 输出当前的环境变量
os.path.split() # 分割目录路径与文件
os.path.bathname() # 输出路径最底层名字
os.path.exists() # 判断路径是否存在
os.path.isabs() # 判断是否为绝对路径
os.path.isfile() # 判断是否为文件
os.path.isdir() # 判断是否为目录
os.path.join(path1,path2.....) # 将多个路径组合返回,第一个绝对路径之前的参数将被忽略,路径可不存在
os.path.getatime() # 返回文件或目录存取时间
os.path.getmtime() # 返回文件或目录修改时间
os.path.getctime() # 返回文件或目录创建时间

8、re正则表达式

re.match 从头开始匹配  ^括号在match里面没用
re.search 匹配包含,从左往右,用.group返回结果
re.findall 把所有匹配到的所有字符放到以列表中的元素返回
re.splitall 把匹配到的字符当做列表分隔符
re.sub 匹配字符并替换 匹配结束后可以加匹配模式
re.I
re.M
re.S '.' 表示匹配任意一个字符
'+' 匹配一个或多个字符
'$' 匹配字符结尾
'^' 匹配字符开头
'?' 匹配前一个字符0次或一次
'{m}' 匹配前一个字符m次
'{n,m}' 匹配前一个字符n到m次
'(....)' 分组匹配 \A 同^ 开头
\Z 同$ 结尾
\d 匹配数字
\D 匹配非数字
\w 匹配[A-Za-z0-9]
\W 匹配非[A-Za-z0-9]
\s 匹配空白字符,TAB自动为\t
print(re.findall('a\w+n','awnSsdaBilnlldGg')) = print(re.findall('a[a-zA-Z0-9]+n','awnSsdaBilnlldGg')) # ['awnSsdaBiln']
print(re.findall('a.+u$','duaklu') # [uaklu] $以u结尾

print(re.findall('aaa?','dsaaadiuoaaioa')) # [aaa,aa] 'aaa?' 返回前面那个a零次或者一次 可以匹配aaa或者aa
print(re.findall('[0-9]{3}','duan1nd432io2346k6j')) # 返回3个成组的数字,多于3个则只返回3个
print(re.findall('[0-9]{1,3}','duan1nd432io23423k6j')) # 返回1到3个成组的数字,一个组合多于3个则拆分
print(re.search('abc{3}','abcddfdseccabccc')) # [abccc]
print(re.findall('abc{1,3}','abcddfdseccabccc'))# [abc,abcc,abccc]
print(re.search('abc|ABC','asdabc123ABC')) # 或  search >>> abc
print(re.findall('abc|ABC','asdabc123ABC')) # 或 findall >>> abc , ABC print(re.search('(abc){2}(\|\|=){2}','ASDabcabc||=||=daf')) # 分组匹配 print(re.search('\A[0-9]+[a-z]\Z','123b') # 数字开头,小写字母结尾 高级分组匹配:
print(re.search('(?P<name>[0-9]{6})(?P<birthday>[0-9]{4})(?P<month>[0-9]{2})','500107197012').groupdict())
#将数据传为字典 >>>{'name': '500107', 'birthday': '1970', 'month': '12'}

截断
print(re.search('\W+','dfa#dagad$dg')) #以特殊字符截断  >>>['dfa', 'dagad', 'dg']

替换

print(re.sub('[0-9]+','#','asdf1231adfadf21314')) # 将数字以#替换 >>>[ asdf#adfadf# ]

9、xml模块

例子:xml_text.xml

<data>
<country name="Liechtenstein">
<rank updated="yes">2</rank>
<year updated="yes">2013</year>
<gdppc>141100</gdppc>
<neighbor direction="E" name="Austria" />
<neighbor direction="W" name="Switzerland" />
</country>
<country name="Singapore">
<rank updated="yes">5</rank>
<year updated="yes">2016</year>
<gdppc>59900</gdppc>
<neighbor direction="N" name="Malaysia" />
</country>
<country name="Panama">
<rank updated="yes">69</rank>
<year updated="yes">2016</year>
<gdppc>13600</gdppc>
<neighbor direction="W" name="Costa Rica" />
<neighbor direction="E" name="Colombia" />
</country>
</data>
import xml.etree.ElementTree as ET
tree = ET.parse('xmltext.xml')
root = tree.getroot()
print(root.tag) for child in root:
print(child.tag,child.attrib)
for i in child:
print(i.tag,i.text,i.attrib) for node in root.iter('year'):
print(node.tag,node.text) #修改
for node_1 in root.iter('year'):
new_year = int(node_1.text)+1
node_1.text = str(new_year)
node_1.set('updated','yes')
tree.write('xmltext.xml') #删除 for country in root.findall('country'):
rank = int(country.find('rank').text)
if rank>50:
root.remove(country)
tree.write('output.xml')

10、Configparser

import configparser

config = configparser.ConfigParser()
config['DEFAULT'] = {
'ServerAliveInterval':'45',
'Compression':'Yes',
'CompressionLevel':'9'
} config['bitnucket.org'] = {}
config['bitnucket.org']['User'] = 'hg'
config['topsecret.server.com'] = {}
topsecret = config['topsecret.server.com']
topsecret['Hose Port'] = '5022'
topsecret['ForwardX11'] = 'no'
config['DEFAULT']['ForwardX11'] = 'yes'
with open('example.ini','w') as configfile:
config.write(configfile) >>>>>>
[DEFAULT]
serveraliveinterval = 45
compression = Yes
compressionlevel = 9
forwardx11 = yes [bitnucket.org]
user = hg [topsecret.server.com]
hose port = 5022
forwardx11 = no

week5的更多相关文章

  1. Spark小课堂Week5 Scala初探

    Spark小课堂Week5 Scala初探 Scala是java威力加强版. 对Java的改进 这里会结合StreamingContext.scala这个代码说明下对Java的改进方面. 方便测试方式 ...

  2. 20165214 2018-2019-2 《网络对抗技术》Exp3 免杀原理与实践 Week5

    <网络对抗技术>Exp3 免杀原理与实践 Week5 一.实验内容 1.正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,加壳工具,使用shell ...

  3. 20165310 NetSec2019 Week5 Exp3 免杀原理与实践

    20165310 NetSec2019 Week5 Exp3 免杀原理与实践 一.免杀原理 杀软是如何检测出恶意代码的 基于特征码的检测:特征码就是一段恶意程序有但是正常程序没有的一段代码,当杀软检测 ...

  4. 转 cousera computational neuroscience week5 学习笔记(part 1)

    (2013-08-14 14:58:41) 转载▼ 标签: 学习笔记 it 很久没有写博文了,之所以重新写还是因为看了coursera的computational neuroscience之后,发现这 ...

  5. Internet History, Technology and Security (Week5.2)

    Week5 Now, I want to make it real clear that, when I give you a 15 minute video of an amazing invent ...

  6. Internet History, Technology and Security (Week5.1)

    Week5 The Transport layer is built on the Internetwork layer and is what makes our network connectio ...

  7. Internet History,Technology,and Security - Technology: Internets and Packets (Week5)

    Week5 Technology: Internets and Packets Welcome to Week 5! This week, we’ll be covering internets an ...

  8. week5 作业

    week5 作业 1.描述GPT是什么,应该怎么使用? 描述GPT之前要简单了解MBR分区,MBR(Main Boot Record)叫做主引导记录,其位于磁盘的最前端,由一段代码组成,共占用512个 ...

  9. 《Using Python to Access Web Data》 Week5 Web Services and XML 课堂笔记

    Coursera课程<Using Python to Access Web Data> 密歇根大学 Week5 Web Services and XML 13.1 Data on the ...

  10. 《Python Data Structures》Week5 Dictionary 课堂笔记

    Coursera课程<Python Data Structures> 密歇根大学 Charles Severance Week5 Dictionary 9.1 Dictionaries 字 ...

随机推荐

  1. jmeter接口/性能压测入门

    1.相关知识 https://www.cnblogs.com/star91/p/5059222.html http://www.51testing.com/zhuanti/jmeter.html 测试 ...

  2. 1.2:Properties

    文章著作权归作者所有.转载请联系作者,并在文中注明出处,给出原文链接. 本系列原更新于作者的github博客,这里给出链接. 上一节我们了解了一个Shader的基本结构,这一节,我们从 Propert ...

  3. ElasticSearch(十二)删除数据插件delete-by-query

    在ElasticSearch2.0之后的版本中没有默认的delete-by-query,想使用此命令需要安装这个插件. 首先需要进入ES的目录 [root@node122 elasticsearch] ...

  4. XUnit测试框架-Python unittest

    选择 语言选择 本次个人作业我选择的语言是Python,了解学习Python有一段时间了但是一直没有练习,所以这次玩蛇,使用的版本是Python3.6. 开发工具选择 我选择的IDE是Pycharm, ...

  5. 迭代(遍历)时候不可以使用集合的remove和add方法,但可使用Java迭代器的remove和add方法

    不要在 foreach 循环里进行元素的 remove/add 操作.remove 元素请使用 Iterator 方式. 反例: public class ForeachTest { private ...

  6. [c/c++] programming之路(26)、结构体

    一.初始化字符串 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include&l ...

  7. Android中本地广播的实现

    其实Android的本地广播并没有什么好讲的,他就是用了一个localbroadcastmanager类来sendbroadcast,以及注册和注销广播,没有什么特点,其中实例该类的时候用了getin ...

  8. Educational Codeforces Round 48 (Rated for Div. 2)

    http://codeforces.com/contest/1016 A. 没想到这个也会TLE,太粗心了 B. 暴力就好了,多情况讨论又出错... 思路跟我一样的解法   为什么我做了那么多讨论,原 ...

  9. oracle 结果集合并

    SELECT case ' then ()) FROM T_UEP_DB_UNION A ' ' start with A.UNION_CODE = U.UNION_CODE CONNECT BY P ...

  10. 连接MySQL报错The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone.

    MySQL time zone 时区错误 使用root用户登陆执行命令: ---> show variables like '%time_zone%'; 默认值system为美国时间:如下图: ...