python常用模块

目录

python常用模块... 1

第1章 time与datetime模块... 1

1.1 格式化字符串... 2

1.2 时间转换:... 3

1.3 时间加减... 5

1.4 例子... 5

1.4.1 import time. 5

1.4.2 import datetime: 6

第2章 random模块... 7

2.1 随机验证码... 7

第3章 os模块... 8

3.1 os模块是与操作系统交互的一个接口... 8

3.2 Linux与MAC平台上... 9

3.3 os路径处理... 9

第4章 sys模块... 10

4.1 打印进度条:... 10

第5章 shutil模块... 11

5.1 shutil.copyfileobj(fsrc, fdst[, length]) 12

5.2 文件压缩打包... 13

第6章 shelve模块... 15

第7章 XML模块... 16

第8章 re模块... 18

8.1 什么是正则?... 18

8.2 示例:... 18

第9章 hashlib模块... 23

9.1 什么是hashlib. 23

9.2 hashlib特点... 23

9.3 示例:... 23

第10章 subprocess模块... 25

第11章 configparser模块... 26

 

 

第1章 time与datetime模块

在Python中,通常有这几种方式来表示时间:

时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。

格式化的时间字符串(Format String)

结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)

 

例子:

import time

#--------------------------我们先以当前时间为准,让大家快速认识三种形式的时间

print(time.time()) # 时间戳:1487130156.419527

print(time.strftime("%Y-%m-%d %X")) #格式化的时间字符串:'2017-02-15 11:40:53'


print(time.localtime()) #本地时区的struct_time

print(time.gmtime())    #UTC时区的struct_time

 

 

1.1 格式化字符串

%a    Locale’s abbreviated weekday name.    

%A    Locale’s full weekday name.    

%b    Locale’s abbreviated month name.    

%B    Locale’s full month name.    

%c    Locale’s appropriate date and time representation.    

%d    Day of the month as a decimal number [01,31].    

%H    Hour (24-hour clock) as a decimal number [00,23].    

%I    Hour (12-hour clock) as a decimal number [01,12].    

%j    Day of the year as a decimal number [001,366].    

%m    Month as a decimal number [01,12].    

%M    Minute as a decimal number [00,59].    

%p    Locale’s equivalent of either AM or PM.    (1)

%S    Second as a decimal number [00,61].    (2)

%U    Week number of the year (Sunday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Sunday are considered to be in week 0.    (3)

%w    Weekday as a decimal number [0(Sunday),6].     

%W    Week number of the year (Monday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Monday are considered to be in week 0.    (3)

%x    Locale’s appropriate date representation.    

%X    Locale’s appropriate time representation.    

%y    Year without century as a decimal number [00,99].    

%Y    Year with century as a decimal number.    

%z    Time zone offset indicating a positive or negative time difference from UTC/GMT of the form +HHMM or -HHMM, where H represents decimal hour digits and M represents decimal minute digits [-23:59, +23:59].    

%Z    Time zone name (no characters if no time zone exists).    

%%    A literal '%' character.
格式化字符串

 

 

1.2 时间转换:

其中计算机认识的时间只能是'时间戳'格式,而程序员可处理的或者说人类能看懂的时间有: '格式化的时间字符串','结构化的时间' ,于是有了下图的转换关系

 

 

#--------------------------按图1转换时间

# localtime([secs])

# 将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。

time.localtime()

time.localtime(1473525444.037215)

 

# gmtime([secs]) 和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。

 

# mktime(t) : 将一个struct_time转化为时间戳。

print(time.mktime(time.localtime()))#1473525749.0

 

 

# strftime(format[, t]) : 把一个代表时间的元组或者struct_time(如由time.localtime()和

# time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个

# 元素越界,ValueError的错误将会被抛出。

print(time.strftime("%Y-%m-%d %X", time.localtime()))#2016-09-11 00:49:56

 

# time.strptime(string[, format])

# 把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。

print(time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X'))

#time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=37, tm_sec=6,

#  tm_wday=3, tm_yday=125, tm_isdst=-1)

#在这个函数中,format默认为:"%a %b %d %H:%M:%S %Y"。
View Code

 

 

 

 

#--------------------------按图2转换时间

# asctime([t]) : 把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'。

# 如果没有参数,将会将time.localtime()作为参数传入。

print(time.asctime())#Sun Sep 11 00:43:43 2016

 

# ctime([secs]) : 把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为

# None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。

print(time.ctime())  # Sun Sep 11 00:46:38 2016

print(time.ctime(time.time()))  # Sun Sep 11 00:46:38 2016
View Code

 

 

1.3 时间加减

#时间加减

import datetime

 

# print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925

#print(datetime.date.fromtimestamp(time.time()) )  # 时间戳直接转成日期格式 2016-08-19

# print(datetime.datetime.now() )

# print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天

# print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天

# print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时

# print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分

 
# c_time  = datetime.datetime.now()

# print(c_time.replace(minute=3,hour=2)) #时间替换

 

datetime模块

 

1.4 例子

1.4.1 import time

import time

时间分为三种形式

1、时间戳

print(time.time())

start_time=time.time()

time.sleep(3)

stop_time=time.time()

print(stop_time-start_time)

 

2、格式化的字符串

print(time.strftime('%Y-%m-%d %H:%M:%S %p'))

print(time.strftime('%Y-%m-%d %X %p'))

 

3、struct_time对象

print(time.localtime()) # 上海:东八区

print(time.localtime().tm_year)

print(time.localtime().tm_mday)

 

print(time.gmtime()) # UTC时区

 

 

 

了解的知识

print(time.localtime(1111111111).tm_hour)

print(time.gmtime(1111111111).tm_hour)

 

 

print(time.mktime(time.localtime()))

 

print(time.strftime('%Y/%m/%d',time.localtime()))

print(time.strptime('2017/04/08','%Y/%m/%d'))

 

 

print(time.asctime(time.localtime()))

print(time.ctime(12312312321))
View Code

 

 

 

1.4.2 import datetime:

import datetime

 

print(datetime.datetime.now())

print(datetime.datetime.now() + datetime.timedelta(days=3))

print(datetime.datetime.now() + datetime.timedelta(days=-3))

print(datetime.datetime.now() + datetime.timedelta(hours=3))

print(datetime.datetime.now() + datetime.timedelta(seconds=111))

 

current_time=datetime.datetime.now()

print(current_time.replace(year=1977))

 

print(datetime.date.fromtimestamp(1111111111))

 

第2章 random模块

import random

 

print(random.random())#(0,1)----float    大于0且小于1之间的小数

 

print(random.randint(1,3))  #[1,3]    大于等于1且小于等于3之间的整数

 

print(random.randrange(1,3)) #[1,3)    大于等于1且小于3之间的整数

 

print(random.choice([1,'23',[4,5]]))#1或者23或者[4,5]

 

print(random.sample([1,'23',[4,5]],2))#列表元素任意2个组合

 

print(random.uniform(1,3))#大于1小于3的小数,如1.927109612082716

 

 

item=[1,3,5,7,9]

random.shuffle(item) #打乱item的顺序,相当于"洗牌"

print(item)

 

 

2.1 随机验证码

i

mport random

 

def make_code(n=5):

    res=''

    for i in range(n):

        s1=str(random.randint(0,9))

        s2=chr(random.randint(65,90))

        res+=random.choice([s1,s2])

    return res

 

print(make_code(10))

 

第3章 os模块

3.1 os模块是与操作系统交互的一个接口

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    输出用于分割文件路径的字符串 win下为;,Linux下为:

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

os.path.getsize(path) 返回path的大小

 
模块

 

3.2 Linux与MAC平台上

在Linux和Mac平台上,该函数会原样返回path,在windows平台上会将路径中所有字符转换为小写,并将所有斜杠转换为饭斜杠。

>>> os.path.normcase('c:/windows\\system32\\')  

'c:\\windows\\system32\\'  

  

 

规范化路径,如..和/

>>> os.path.normpath('c://windows\\System32\\../Temp/')  

'c:\\windows\\Temp'  

 

>>> a='/Users/jieli/test1/\\\a1/\\\\aa.py/../..'

>>> print(os.path.normpath(a))

/Users/jieli/test1

 

 

3.3 os路径处理

os路径处理

#方式一:推荐使用

import os

#具体应用

import os,sys

possible_topdir = os.path.normpath(os.path.join(

    os.path.abspath(__file__),

    os.pardir, #上一级

    os.pardir,

    os.pardir

))

sys.path.insert(0,possible_topdir)

 

#方式二:不推荐使用

os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

 

第4章 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       返回操作系统平台名称

 

 

 

4.1 打印进度条:

print('[                 ]')

print('[##               ]')

print('[###              ]')

print('[####             ]')

print('[#####            ]')

 

 

print('[%-50s]' %'#')

print('[%-50s]' %'##')

print('[%-50s]' %'###')

 

 

第一个%是取消第二个%号的特殊意义的

num=30

print('%s%%' %num)

 

 

width=30

print(('[%%-%ds]' %width) %'#')

print(('[%%-%ds]' %width) %'##')

print(('[%%-%ds]' %width) %'###')

 

 

def progress(percent,width=50):

    if percent > 1:

        percent=1

    show_str=('[%%-%ds]' %width) %(int(width*percent) * '#')

    print('\r%s %d%%' %(show_str,int(100*percent)),end='')

 

import time

recv_size=0

total_size=8097

while recv_size < total_size:

    time.sleep(0.1)

    recv_size+=8096

    percent=recv_size / total_size

    progress(percent)

 
打印进度条

 

 

第5章 shutil模块

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

5.1 shutil.copyfileobj(fsrc, fdst[, length])

 

将文件内容拷贝到另一个文件中

1 import shutil

2 

3 shutil.copyfileobj(open('old.xml','r'), open('new.xml', 'w'))

 

shutil.copyfile(src, dst)
拷贝文件

1 shutil.copyfile('f1.log', 'f2.log') #目标文件无需存在

 

shutil.copymode(src, dst)
仅拷贝权限。内容、组、用户均不变

1 shutil.copymode('f1.log', 'f2.log') #目标文件必须存在

 

shutil.copystat(src, dst)
仅拷贝状态的信息,包括:mode bits, atime, mtime, flags

1 shutil.copystat('f1.log', 'f2.log') #目标文件必须存在

 

shutil.copy(src, dst)
拷贝文件和权限

1 import shutil

2 

3 shutil.copy('f1.log', 'f2.log')

 

shutil.copy2(src, dst)
拷贝文件和状态信息

1 import shutil

2 

3 shutil.copy2('f1.log', 'f2.log')

 

shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None)
递归的去拷贝文件夹

1 import shutil

2 

3 shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*')) #目标目录不能存在,注意对folder2目录父级目录要有可写权限,ignore的意思是排除 

 拷贝软连接

 

shutil.rmtree(path[, ignore_errors[, onerror]])
递归的去删除文件

1 import shutil

2 

3 shutil.rmtree('folder1')

 

shutil.move(src, dst)
递归的去移动文件,它类似mv命令,其实就是重命名。

1 import shutil

2 

3 shutil.move('folder1', 'folder3')

 

shutil.make_archive(base_name, format,...)

创建压缩包并返回文件路径,例如:zip、tar

创建压缩包并返回文件路径,例如:zip、tar

base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
如 data_bak                       =>保存至当前路径
如:/tmp/data_bak =>保存至/tmp/
format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
root_dir: 要压缩的文件夹路径(默认当前目录)
owner: 用户,默认当前用户
group: 组,默认当前组
logger: 用于记录日志,通常是logging.Logger对象
shutil模块

 

 

5.2 文件压缩打包

#将 /data 下的文件打包放置当前程序目录

import shutil

ret = shutil.make_archive("data_bak", 'gztar', root_dir='/data')

 

 

#将 /data下的文件打包放置 /tmp/目录

import shutil

ret = shutil.make_archive("/tmp/data_bak", 'gztar', root_dir='/data')

shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:

import zipfile

 

# 压缩

z = zipfile.ZipFile('laxi.zip', 'w')

z.write('a.log')

z.write('data.data')

z.close()

 

# 解压

z = zipfile.ZipFile('laxi.zip', 'r')

z.extractall(path='.')

z.close()

 

zipfile压缩解压缩

 

 

import tarfile

 

# 压缩

>>> t=tarfile.open('/tmp/egon.tar','w')

>>> t.add('/test1/a.py',arcname='a.bak')

>>> t.add('/test1/b.py',arcname='b.bak')

>>> t.close()

 

 

# 解压

>>> t=tarfile.open('/tmp/egon.tar','r')

>>> t.extractall('/egon')

>>> t.close()

 

tarfile压缩解压缩

 
文件压缩打包

 

第6章 shelve模块

shelve模块比pickle模块简单,只有一个open函数,返回类似字典的对象,可读可写;key必须为字符串,而值可以是python所支持的数据类型

例子:

import shelve

info1={'age':18,'height':180,'weight':80}

info2={'age':73,'height':150,'weight':80}

 

d=shelve.open('db.shv')

d['egon']=info1

d['alex']=info2

d.close()

 

 

d=shelve.open('db.shv')

# print(d['egon'])

# print(d['alex'])

d.close()

 

 

d=shelve.open('db.shv',writeback=True)

d['alex']['age']=10000

# print(d['alex'])

d.close()

 

 

d=shelve.open('db.shv',writeback=True)

print(d['alex'])

d.close()

 

 

import json

 

l={'a':1,'b':2,'c':3}

json.dump(l,open('a.json','wt',encoding='utf-8'))
View Code

 

 

 

第7章 XML模块

xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口还主要是xml。

 

示例:

#==========================================>查

import xml.etree.ElementTree as ET

#

tree=ET.parse('a.xml')

root=tree.getroot()

三种查找节点的方式

res=root.iter('rank') # 会在整个树中进行查找,而且是查找到所有

for item in res:

    # print(item)

    print('='*50)

    print(item.tag) # 标签名

    print(item.attrib) #属性

    print(item.text) #文本内容

 

 

res=root.find('country') # 只能在当前元素的下一级开始查找。并且只找到一个就结束

print(res.tag)

print(res.attrib)

print(res.text)

nh=res.find('neighbor')

print(nh.attrib)

 

 

cy=root.findall('country') # 只能在当前元素的下一级开始查找,

print([item.attrib for item in cy])

 

 

 

 

==========================================>import xml.etree.ElementTree as ET

tree=ET.parse('a.xml')

root=tree.getroot()

 

for year in root.iter('year'):

    year.text=str(int(year.text) + 10)

    year.attrib={'updated':'yes'}

 

 

tree.write('b.xml')

tree.write('a.xml')

 

 

 

#==========================================>增

import xml.etree.ElementTree as ET

tree=ET.parse('a.xml')

root=tree.getroot()

 

for country in root.iter('country'):

    print(country)

    year=country.find('year')

    print(year)

    if int(year.text) > 2020:

        print(country.attrib)

        ele=ET.Element('egon')

        ele.attrib={'nb':'yes'}

        ele.text='非常帅'

        country.append(ele)

        country.remove(year)

tree.write('b.xml')
View Code

 

第8章 re模块

8.1 什么是正则?

正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行

 

8.2 示例:

import re

print(re.findall('\w','ab 12\+- *&_'))

                                 \w

print(re.findall('\W','ab 12\+- *&_'))

print(re.findall('\s','ab \r1\n2\t\+- *&_'))

print(re.findall('\S','ab \r1\n2\t\+- *&_'))

print(re.findall('\d','ab \r1\n2\t\+- *&_'))

                                       \d

print(re.findall('\D','ab \r1\n2\t\+- *&_'))

 

print(re.findall('\w_sb','egon alex_sb123123wxx_sb,lxx_sb'))

                                                      \w_sb

 

print(re.findall('\Aalex','abcalex is salexb'))

print(re.findall('\Aalex','alex is salexb'))

print(re.findall('^alex','alex is salexb'))

print(re.findall('sb\Z','alexsb is sbalexbsb'))

print(re.findall('sb$','alexsb is sbalexbsb'))

                                          sb

 

print(re.findall('^ebn$','ebn1'))

                          ebn

 

 

print(re.findall('a\nc','a\nc a\tc a1c'))

 

 

重复匹配:

.   ?   *   +  {m,n}  .*  .*?

1、.:代表除了换行符外的任意一个字符

print(re.findall('a.c','abc a1c aAc aaaaaca\nc'))

                                          a.c

print(re.findall('a.c','abc a1c aAc aaaaaca\nc',re.DOTALL))

 

2、?:代表左边那一个字符重复0次或1次

print(re.findall('ab?','a ab abb abbb abbbb abbbb'))

                                     ab?

 

3、*:代表左边那一个字符出现0次或无穷次

print(re.findall('ab*','a ab abb abbb abbbb abbbb a1bbbbbbb'))

                                                  ab*

 

4、+ :代表左边那一个字符出现1次或无穷次

print(re.findall('ab+','a ab abb abbb abbbb abbbb a1bbbbbbb'))

                                                   ab+

 

5、{m,n}:代表左边那一个字符出现m次到n次

print(re.findall('ab?','a ab abb abbb abbbb abbbb'))

print(re.findall('ab{0,1}','a ab abb abbb abbbb abbbb'))

 

print(re.findall('ab*','a ab abb abbb abbbb abbbb a1bbbbbbb'))

print(re.findall('ab{0,}','a ab abb abbb abbbb abbbb a1bbbbbbb'))

 

print(re.findall('ab+','a ab abb abbb abbbb abbbb a1bbbbbbb'))

print(re.findall('ab{1,}','a ab abb abbb abbbb abbbb a1bbbbbbb'))

 

 

print(re.findall('ab{1,3}','a ab abb abbb abbbb abbbb a1bbbbbbb'))

 

 

6、.*:匹配任意长度,任意的字符=====》贪婪匹配

print(re.findall('a.*c','ac a123c aaaac a *123)()c asdfasfdsadf'))

                       a.*c

 

7、.*?:非贪婪匹配

print(re.findall('a.*?c','a123c456c'))

 

 

 

 

():分组

print(re.findall('(alex)_sb','alex_sb asdfsafdafdaalex_sb'))

 

                           (alex)_sb

 

print(re.findall(

    'href="(.*?)"',

    '<li><a id="blog_nav_sitehome" class="menu" href="http://www.cnblogs.com/">博客园</a></li>')

)

<li><a id="blog_nav_sitehome" class="menu" href="http://www.cnblogs.com/">博客园</a></li>

                                          href=".*?"

 

 

[]:匹配一个指定范围内的字符(这一个字符来自于括号内定义的)

print(re.findall('a[0-9][0-9]c','a1c a+c a2c a9c a11c a-c acc aAc'))

 

当-需要被当中普通符号匹配时,只能放到[]的最左边或最 右边

print(re.findall('a[-+*]c','a1c a+c a2c a9c a*c a11c a-c acc aAc'))

 

print(re.findall('a[a-zA-Z]c','a1c a+c a2c a9c a*c a11c a-c acc aAc'))

 

 

[]内的^代表取反的意思

print(re.findall('a[^a-zA-Z]c','a c a1c a+c a2c a9c a*c a11c a-c acc aAc'))

print(re.findall('a[^0-9]c','a c a1c a+c a2c a9c a*c a11c a-c acc aAc'))

 

 

print(re.findall('([a-z]+)_sb','egon alex_sb123123wxxxxxxxxxxxxx_sb,lxx_sb'))

                                               [a-z]+_sb

 

 

 

| :或者

print(re.findall('compan(ies|y)','Too many companies have gone bankrupt, and the next one is my company'))

 

(?:):代表取匹配成功的所有内容,而不仅仅只是括号内的内容

print(re.findall('compan(?:ies|y)','Too many companies have gone bankrupt, and the next one is my company'))

 

print(re.findall('alex|sb','alex sb sadfsadfasdfegon alex sb egon'))

 

 

 

 

re模块的其他方法:

print(re.findall('alex|sb','123123 alex sb sadfsadfasdfegon alex sb egon'))

print(re.search('alex|sb','123213 alex sb sadfsadfasdfegon alex sb egon').group())

print(re.search('^alex','123213 alex sb sadfsadfasdfegon alex sb egon'))

 

print(re.search('^alex','alex sb sadfsadfasdfegon alex sb egon').group())

print(re.match('alex','alex sb sadfsadfasdfegon alex sb egon').group())

print(re.match('alex','123213 alex sb sadfsadfasdfegon alex sb egon'))

 

 

info='a:b:c:d'

print(info.split(':'))

print(re.split(':',info))

 

info=r'get :a.txt\3333/rwx'

print(re.split('[ :\\\/]',info))

 

 

print('egon is beutifull egon'.replace('egon','EGON',1))

 

print(re.sub('(.*?)(egon)(.*?)(egon)(.*?)',r'\1\2\3EGON\5','123 egon is beutifull egon 123'))

 

             (123 )(egon)( is beutifull )(egon)( 123)

 

\1\2\3EGON\5

 

print(re.sub('(lqz)(.*?)(SB)',r'\3\2\1',r'lqz is SB'))

print(re.sub('([a-zA-Z]+)([^a-zA-Z]+)([a-zA-Z]+)([^a-zA-Z]+)([a-zA-Z]+)',r'\5\2\3\4\1',r'lqzzzz123+ is SB'))

 

(lqzzzz)(123+ )(is)( )(SB)

 

 

pattern=re.compile('alex')

print(pattern.findall('alex is alex alex'))

print(pattern.findall('alexasdfsadfsadfasdfasdfasfd is alex alex'))
View Code

 

 

 

第9章 hashlib模块

9.1 什么是hashlib

hash是一种算法,该算法接受传入的内容,经过运算得到一串hash值

 

9.2 hashlib特点

1、只要传入的内容一样,得到的hash值必然一样=====>要用明文传输密码文件完整性校验

2、不能由hash值返解成内容=======》把密码做成hash值,不应该在网络传输明文密码

3、只要使用的hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的

 

9.3 示例:

import hashlib

 

m = hashlib.md5()

m.update('hello'.encode('utf-8'))

m.update('work'.encode('utf-8'))

print(m.hexdigest())

 

 

读文件

import hashlib

 

m=hashlib.md5()

with open(r'E:\python_file\2018-4-10\hash.py','rb')as f:

    for line in f:

        m.update(line)

 

    hv=m.hexdigest()

print(hv)

 

 

密码加盐

import  hashlib

pwd='alex3714'

m=hashlib.md5()

m.update('一行白鹭上青天') ###不加反解编码会报错

m.update(pwd.encode('utf-8'))

m.update(''.encode('utf-8'))

print(m.hexdigest())

 

import hashlib

m=hashlib.md5()

m.update('helloworld'.encode('utf-8'))

print(m.hexdigest())

 

m=hashlib.sha3_512()

m.update('helloworld'.encode('utf-8'))

print(m.hexdigest())

 

m=hashlib.sha1()

m.update('helloworld'.encode('utf-8'))

print(m.hexdigest())

 

import hmac

m=hmac.new('阿萨德啊'.encode('utf-8'))

m.update('aaa1a23'.encode('utf-8'))

print(m.hexdigest())
View Code

 

 

 

 

第10章 subprocess模块

示例:

import subprocess

import time

 

time.sleep(500)

 

 

dos命令

tasklist | findstr python

taskkill /?

D:\code>tasklist | findstr python

python.exe                   12360 Console                    1     11,024 K

 

D:\code>taskkill /F /PID 12360

 

 

linux系统(了解)

ps aux | grep python

kill -9 PID

 

 

import os

while True:

    cmd=input('>>>: ').strip()

    if not cmd:continue

    # print('%s run' %cmd)

    res=os.system(cmd)

 

    network.send(res)

 

 

 

import os

 

res=os.system('dixCVr')

print('运行结果:',res)

 

import subprocess

 

obj=subprocess.Popen('dir',

                     shell=True,

                     stdout=subprocess.PIPE,

                     stderr=subprocess.PIPE

                     )

 

# print(obj)

 

res1=obj.stdout.read()

print('正确结果1111: ',res1)

 

res2=obj.stdout.read()

print('正确结果2222: ',res2) #只能取一次,取走了就没有了

 

# res2=obj.stderr.read()

# print('错误结果:',res2.decode('gbk'))

 
View Code

 

 

第11章 configparser模块

示例:

import configparser

 

config=configparser.ConfigParser()

config.read('my.ini')

 

# secs=config.sections()

# print(secs)

 

# print(config.options('egon'))

 

# age=config.get('egon','age')`

# age=config.getint('egon','age')

# print(age,type(age))

 

# salary=config.getfloat('egon','salary')

# print(salary,type(salary))

 

b=config.getboolean('egon','is_beatifull')

print(b,type(b))
View Code

 

posted @ 2018-04-15 20:32  Jacob先生  阅读(155)  评论(0编辑  收藏  举报