首页 技术 正文
技术 2022年11月16日
0 收藏 806 点赞 4,740 浏览 15542 个字

第1章 模块
1.1 概述
1.2 模块的分类
1.2.1 内置模块
1.2.2 扩展模块
1.2.3 模块安装
1.2.4 自定义模块
第2章 模块之内置模块
2.1 collections模块
2.1.1 collections数据类型
2.1.2 nametuple
2.1.3 可命名元组
2.1.4 queue 模块
2.1.5 Ordereddict有序字典
2.1.6 defaultfict 默认字典
2.2 time模块
2.2.1 sleep
2.3 时间的表示格式
2.3.1 时间戳(timestamp)
2.3.2 格式化时间(Format String)
2.3.3 元组(struct_time)
2.3.4 时间戳的转化
2.3.5 字符串时间的转化方法
2.4 random
2.4.1 随机小数
2.4.2 随机整数
2.4.3 打乱列表顺序
2.4.4 随机练习:验证
2.4.5 练习题:抢红包
2.5 sys模块
2.5.1 定义
2.5.2 调用方法
2.5.3 ****sys.path
2.5.4 sys.platform
2.5.5 sys.version
2.5.6 sys.modules
2.5.7 sys.exit()
2.5.8 sys.argv
2.6 os模块
2.6.1 os参数整理
2.6.2 os.getcwd
2.6.3 __file__
2.6.4 os.chdir
2.6.5 os.stat(‘path/filename’)
2.6.6 os.path.getsize
2.6.7 目录大小统计练习
2.7 re模块
2.7.1 解释:
2.7.2 规则:
2.7.3 字符组
2.7.4 字符:
2.7.5 量词:
2.7.6 . ^ $
2.7.7 * + ? { }
2.7.8 字符集[][^]
2.7.9 分组 ()与 或 |[^]
2.7.10 转义符 \
2.7.11 贪婪匹配
2.7.12 常用的非贪婪匹配Pattern
2.7.13 +?
2.7.14 .*?的用法
2.7.15 re模块应用
2.7.16 正则应用
2.7.17 惰性匹配
2.7.18 search找一个
2.7.19 分组优先
2.7.20 search中没有分组优先
2.7.21 ?的用法
第3章 拾遗
3.1 进度条

第1章 模块

1.1 概述

n  解释:python有很多现成的函数方法,但这些函数不能都放在内存里,为用户节省很多不必要的内存消耗,用不到的内容就不用导入内存中。

n  定义:一组python或c语言的代码;一堆写好的函数或者类

n  以功能来分类

1.2 模块的分类

1.2.1 内置模块

解释:随着Python解释器的安装运行直接可以使用

1.2.2 扩展模块

解释:需要自己安装才能使用如:Django itchat

1.2.3 模块安装

pip3 install diango

1.2.4 自定义模块

解释:用户根据自己的㤹完成的一组功能

第2章 模块之内置模块

2.1 collections模块

解释:使用前必须先导入,已知的所有模块名都不可以作为python文件名

导入模块

import collections

每一个类都是一个数据类型

例:

a = ‘a’

实际上是对象的实例化:

a = str(‘a’)

2.1.1 collections数据类型

collections模块在内置数据类型基础上还提供了额外的几个数据类型:Counter、deque、deque、defaultdicr、namedtupe 和OrderedDictd等

l  namedtuple: 生成可以使用名字来访问元素内容的tuple

l  deque: 双端队列,可以快速的从另外一侧追加和推出对象

l  Counter: 计数器,主要用来计数

l  OrderedDict: 有序字典

l  defaultdict: 带有默认值的字典

2.1.2 nametuple

解释:生成可以使用名字来访问元素的tuple

实例1)求根号

from math import sqrt

p = (1,2)

print(sqrt(p[0]**2 + p[1]**2))

这样写的可读性非常差,如下:可命名元组来解决

import collections

Point = collections.namedtuple(‘point’,[‘x’,’y’]) #相当创造了一个类,这个类的对象没有方法只有属性

p = Point(1,2) #实例化

from math import sqrt

sqrt(p.x**2 + p.y**2)

2.1.3 可命名元组

例:

point=collections.namedtuple(‘point’,[‘x’,’y’]) #相当创造了一个类,这个类的对象没有方法只有属性

p = point(1,2) #实例化

print(p)

print(p.x)

print(p.y)

缺点:是不能修改的

2.1.4 queue 模块

定义:队列

l  队列:先进来的先出去-——售票

l  栈:先进来的后出去——计算机的算法

区别:在存储数据的基础上,严格的维持了一个秩序

例1):队列

import  queue

q = queue.Queue()

l = list()

q.put(1)

q.put(2)

print(q.get())

输出:

C:\python3\python.exe D:/python/untitled2/python_8/lession.py

1

例2):双端队列:

解释:维持一个左侧右侧取放的规则

import collections

dq = collections.deque()

dq.append(1)

dq.append(2)

print(dq)

print(dq.pop())

输出:

C:\python3\python.exe D:/python/untitled2/python_8/lession.py

deque([1, 2])

2

例3):双端队列

import collections

dq = collections.deque()

dq.append(1)

dq.append(2)

print(dq)

print(dq.pop())

print(dq)

dq.appendleft(5)

print(dq.popleft())

print(dq)

输出

C:\python3\python.exe D:/python/untitled2/python_8/lession.py

deque([1, 2])

2

deque([1])

5

deque([1])

2.1.5 Ordereddict有序字典

l  规范创建字典

d = dict([(‘a’,1),(‘b’,2),(‘c’,3)])

print(d)

输出

C:\python3\python.exe D:/python/untitled2/python_8/lession.py

{‘a’: 1, ‘b’: 2, ‘c’: 3}

l  有序取值

from collections import OrderedDict

from collections import OrderedDict

d = OrderedDict([(‘a’,1),(‘b’,2),(‘c’,3)])

print(d)

输出

C:\python3\python.exe D:/python/untitled2/python_8/lession.py

OrderedDict([(‘a’, 1), (‘b’, 2), (‘c’, 3)])

注意:OrderedDict的key会按照插入的顺序排列,不是key本身排序

2.1.6 defaultfict
默认字典

解释:不管key 在不在都不影响value

例1):

from collections import defaultdict

dd = defaultdict(list)

print(dd)

dd[”].append(1)

dd[‘skfdsjfk’].append(2)

print(dd)

输出

C:\python3\python.exe
D:/python/untitled2/python_8/lession.py

defaultdict(<class ‘list’>, {})

defaultdict(<class ‘list’>, {”: [1],
‘skfdsjfk’: [2]})


list 为一个callable可调用对象

例:

from collections import defaultdict

def func():return 5

dd = defaultdict(5)

print(dd[‘dafdfsdfsadf’])

print(dd)

输出

C:\python3\python.exe
D:/python/untitled2/python_8/lession.py

Traceback (most recent call last):

File
“D:/python/untitled2/python_8/lession.py”, line 56, in <module>

dd =
defaultdict(5)

TypeError: first argument must be callable or None

正确的

from collections import defaultdict

def func():return 5

dd = defaultdict(lambda : 5)

print(dd[‘dafdfsdfsadf’])

print(dd)

输出

C:\python3\python.exe
D:/python/untitled2/python_8/lession.py

5

defaultdict(<function <lambda> at 0x00000000027E9BF8>,
{‘dafdfsdfsadf’: 5})


默认值可以修改

例:

from collections import defaultdict

def func():return 5

dd = defaultdict(lambda : 5)

print(dd[‘dafdfsdfsadf’])

print(dd)

dd[‘dafdfsdfsadf’] = 20

print(dd)

输出

C:\python3\python.exe D:/python/untitled2/python_8/lession.py

5

defaultdict(<function <lambda> at
0x0000000001E29BF8>, {‘dafdfsdfsadf’: 5})

defaultdict(<function <lambda> at
0x0000000001E29BF8>, {‘dafdfsdfsadf’: 20})


默认字典练习题

有如下值集合
[11,22,33,44,55,66,77,88,99,90…],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。

即: {‘k1’: 大于66 , ‘k2’: 小于66}

方法1)

values = [11, 22, 33,44,55,66,77,88,99,90]

my_dict = {}

for value in 
values:

if
value>66:

if
‘k1’ in  my_dict:

my_dict[‘k1’].append(value)

else:

my_dict[‘k1’] = [value]

else:

if
‘k2’ in my_dict:

my_dict[‘k2’].append(value)

else:

my_dict[‘k2’] = [value]

print(my_dict)

输出

C:\python3\python.exe
D:/python/untitled2/python_8/lession.py

{‘k2’: [11, 22, 33, 44, 55, 66], ‘k1’: [77, 88,
99, 90]}

方法2)

from collections import defaultdict

values = [11, 22, 33,44,55,66,77,88,99,90]

my_dict = defaultdict(lambda : ‘N/A’)

my_dict = defaultdict(list)

for value in values:

if value
> 66:

my_dict[‘k1’].append(value)

else:

my_dict[‘k2’].append(value)

print(my_dict)

输出:

C:\python3\python.exe
D:/python/untitled2/python_8/lession.py

defaultdict(<class ‘list’>, {‘k2’: [11, 22,
33, 44, 55, 66], ‘k1’: [77, 88, 99, 90]

使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict:

>>> from collections import defaultdict

>>> dd = defaultdict(lambda: ‘N/A’)

>>> dd[‘key1’] = ‘abc’

>>> dd[‘key1’] # key1存在

‘abc’

>>> dd[‘key2’] # key2不存在,返回默认值

‘N/A’

2.2 time模块

引用方法

import time

time.time

2.2.1 sleep

time.sleep(1) #让你当前的程序阻塞一秒

2.3 时间的表示格式

2.3.1 时间戳(timestamp)

为什么要用时间戳——计算机用的

import  time

print(time.time())

输出

C:\python3\python.exe
D:/python/untitled2/python_8/lession.py

1530523030.2910078 #linux时间戳时间

2.3.2 格式化时间(Format String)

解释:人类时间

import  time

print(time.strftime(‘%Y-%m-%d %H:%M:%S’))

输出

C:\python3\python.exe
D:/python/untitled2/python_8/lession.py

2018-07-02 17:20:46

python中时间日期格式化符号:

%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 当前时区的名称

%% %号本身

2.3.3 元组(struct_time)

解释:struct_time元组共有9个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)

索引(Index

属性(Attribute

值(Values

0

tm_year(年)

比如2011

1

tm_mon(月)

1 – 12

2

tm_mday(日)

1 – 31

3

tm_hour(时)

0 – 23

4

tm_min(分)

0 – 59

5

tm_sec(秒)

0 – 60

6

tm_wday(weekday)

0 – 6(0表示周一)

7

tm_yday(一年中的第几天)

1 – 366

8

tm_isdst(是否是夏令时)

默认为0

例:

time.localtime()

time.struct_time(tm_year=2017, tm_mon=7,
tm_mday=24,

          tm_hour=13, tm_min=59, tm_sec=37,

tm_wday=0, tm_yday=205, tm_isdst=0)

小结:时间戳是计算机能够识别的时间;时间字符串是人能够看懂的时间;元组则是用来操作时间的

2.3.4 时间戳的转化

python_8(模块)


时间戳–>结构化时间

#time.gmtime(时间戳)    #UTC时间,与英国伦敦当地时间一致

#time.localtime(时间戳) #当地时间。例如我们现在在北京执行这个方法:与UTC时间相差8小时,UTC时间+8小时 = 北京时间

>>>time.gmtime(1500000000)

time.struct_time(tm_year=2017, tm_mon=7,
tm_mday=14, tm_hour=2, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=0)

>>>time.localtime(1500000000)

time.struct_time(tm_year=2017, tm_mon=7,
tm_mday=14, tm_hour=10, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=195,
tm_isdst=0)


结构化时间–>时间戳 

#time.mktime(结构化时间)

>>>time_tuple =
time.localtime(1500000000)

>>>time.mktime(time_tuple)

1500000000.0


结构化时间–>字符串时间

#time.strftime(“格式定义”,”结构化时间”)  结构化时间参数若不传,则现实当前时间

>>>time.strftime(“%Y-%m-%d %X”)

‘2017-07-24 14:55:36’

>>>time.strftime(“%Y-%m-%d”,time.localtime(1500000000))

‘2017-07-14’


字符串时间–>结构化时间

#time.strptime(时间字符串,字符串对应格式)

>>>time.strptime(“2017-03-16″,”%Y-%m-%d”)

time.struct_time(tm_year=2017, tm_mon=3,
tm_mday=16, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=75, tm_isdst=-1)

>>>time.strptime(“07/24/2017″,”%m/%d/%Y”)

time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24,
tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=205, tm_isdst=-1)

2.3.5 字符串时间的转化方法


结构化时间 –> %a %b %d %H:%M:%S %Y串

#time.asctime(结构化时间) 如果不传参数,直接返回当前时间的格式化串

>>>time.asctime(time.localtime(1500000000))

‘Fri Jul 14 10:40:00 2017’

>>>time.asctime()

‘Mon Jul 24 15:18:33 2017’


时间戳 –> %a %d %d %H:%M:%S %Y串

#time.ctime(时间戳)  如果不传参数,直接返回当前时间的格式化串

>>>time.ctime()

‘Mon Jul 24 15:19:07 2017’

>>>time.ctime(1500000000)

‘Fri Jul 14 10:40:00 2017’

例)计算时间差

import time

true_time=time.mktime(time.strptime(‘2017-09-11
08:30:00′,’%Y-%m-%d %H:%M:%S’))

time_now=time.mktime(time.strptime(‘2017-09-12
11:00:00′,’%Y-%m-%d %H:%M:%S’))

dif_time=time_now-true_time

struct_time=time.gmtime(dif_time)

print(‘过去了%d年%d月%d天%d小时%d分钟%d秒’%(struct_time.tm_year-1970,struct_time.tm_mon-1,

struct_time.tm_mday-1,struct_time.tm_hour,

struct_time.tm_min,struct_time.tm_sec))

2.4 random

定义:随机

2.4.1 随机小数


大于零且小于1的小数

import random

print(random.random())

输出

C:\python3\python.exe D:/python/untitled2/python_8/lession.py

0.6933507043242297


大于1且小于3的小数

import random

print(random.uniform(1,3))

输出

C:\python3\python.exe
D:/python/untitled2/python_8/lession.py

1.3289565836680464

2.4.2 随机整数


大于等于1且小于等于5之间的整数

import random

print(random.randint(1,5))

输出

C:\python3\python.exe
D:/python/untitled2/python_8/lession.py

2


大于等于1且小于10之间的奇数

import random

print(random.randrange(1,10,2))


随机选择一个返回值

import random

print(random.choice([1,’23’,[4,5]]))

输出

C:\python3\python.exe
D:/python/untitled2/python_8/lession.py

[4, 5]

列表中任意两个组合

import random

print(random.sample([1,’23’,[4,5]],2))

输出

C:\python3\python.exe
D:/python/untitled2/python_8/lession.py

[[4, 5], 1]

2.4.3 打乱列表顺序

import random


打乱次序

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

random.shuffle(item)

print(item)

输出

C:\python3\python.exe D:/python/untitled2/python_8/lession.py

[7, 3, 9, 1, 5]

2.4.4 随机练习:验证码

从数字大小写子母中随机选取

import 
random

def random_code(num,alpha=True):

import
random

code =

for i in
range(num):

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

if
alpha:

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

alpha_upper = chr(random.randint(97,122))

choice = random.choice([choice,alpha_lower,alpha_upper])

code
+= choice

return
code

print(random_code(4,True))

输出

C:\python3\python.exe D:/python/untitled2/python_8/lession.py

b49b

2.4.5 练习题:抢红包

例:

import random

import sys

def calRandomValue(total, num):

total =
float(total)

num =
int(num)

min =
0.01  # 基数

if (num
< 1):

return

if num
== 1:

print(“第%d个人拿到红包数为:%.2f”
% (num, total))

return

i = 1

while (i
< num):

max
= total – min * (num – i)

k =
int((num – i) / 2)

if
num – i <= 2:

k = num – i

max
= max / k

monney = random.randint(int(min * 100), int(max * 100))

monney = float(monney) / 100

total = total – monney

print(“第%d个人拿到红包数为:%.2f,
余额为: %.2f” % (i, monney, total))

i +=
1

print(“第%d个人拿到红包数为:%.2f,
余额为: %.2f” % (i, total, 0.0))

if __name__ == “__main__”:

total =
input(‘输入红包总金额:’)

num =
input(‘输入发红包数量:’)

calRandomValue(total, num)

2.5 sys模块

2.5.1 定义

解释:和python解释器相关的模块

2.5.2 调用方法

import sys


sys模块是与python解释器交互的一个接口

sys.argv 命令行参数list,第一个元素是程序本身的路径

sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1)

sys.version 获取python解释程序的版本信息

sys.path 返回模块的搜索路径,初始化使用pythonpath环境变量的值

sys.platform  
返回操作系统平台名称

2.5.3 ****sys.path

解释:关系到你的模块是否顺利的被导入,每个代码都要用,

模块能不能顺利被导入,取决于你的模块是不是在sys.path路径中

路径的寻找是依据sys.path列表中的顺序查找的

找到一个符合的条件会停止查找

2.5.4 sys.platform

定义:判断是否为windows平台

2.5.5 sys.version

判断python版本

import  sys

print(sys.version)

print(sys.platform)

# print(sys.modules)

sys.exit()

输出

D:/python/untitled2/python_8/lession.py

3.6.2 (v3.6.2:5fd33b5, Jul  8 2017, 04:57:36) [MSC v.1900 64 bit (AMD64)]

win32

2.5.6 sys.modules

记载我们已经导入的模块名及导入的模块内存地址

import  sys

print(sys.modules)

输出

C:\python3\python.exe
D:/python/untitled2/python_8/lession.py

{‘builtins’: <module ‘builtins’ (built-in)>,
‘sys’: <module ‘sys’ (built-in)>, ‘_frozen_importlib’: <module
‘_frozen_importlib’ (frozen)>, ‘_imp’: <module ‘_imp’ (built-in)>,
‘_warnings’: <module ‘_warnings’ (built-in)>, ‘_thread’: <module
‘_thread’ (built-in)>, ‘_weakref’

2.5.7 sys.exit()

解释:退出

2.5.8 sys.argv

解释:效率高 直接写入文件,可以节省代码执行时间减少阻塞

import sys

sys.argv

print(sys.srgv)

if sys.srgv[1] == ‘wang’ and sys.argv[1] ==
‘wang123’:

print(“登录成功”)

else:

user =
input(‘username:’)

pwd =
input(‘pasword: ‘)

if user
== ‘wang’and pwd == ‘wang123

print(‘登录成功’)’

终端操作:

 

2.6 os模块

解释:与操作系统相关的模块

2.6.1 os参数整理

os.walk 返回一个三元组(root,dirs,files)

root指当前正在遍历的这个文件夹的本身的地址

dirs是一个list,内容是该文件夹中所有的目录的名字(不包括子目录)

files同样是list,内容是该文件中所有的文件(不包括子目录)

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.popen(“bash command).read()  运行shell命令,获取执行结果

os.environ  获取系统环境变量

os.path

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的大小

2.6.2 os.getcwd

所谓工作目录并不是当前文件所在的位置,而是当前python脚本的工作路径

2.6.3 __file__

显示当前文件所在的绝对路径

print(__file__)

输出

C:\python3\python.exe
D:/python/untitled2/python_8/lession.py

D:/python/untitled2/python_8/lession.py

2.6.4 os.chdir

解释:相当于shell下的cd

例:

import os

print(__file__)#显示当前文件绝对路径

os.chdir(os.path.dirname(__file__))#切换到当前文件下,相当于先cd到文件目录

print(os.getcwd())#返回path的目录

输出

C:\python3\python.exe
D:/python/untitled2/python_8/lession.py

D:/python/untitled2/python_8/lession.py

D:\python\untitled2\python_8

2.6.5 os.stat(‘path/filename’)

注意:os.stat(‘path/filename’)  获取文件/目录信息 的结构说明

st_mode: inode 保护模式

st_ino: inode 节点号。

st_dev: inode 驻留的设备。

st_nlink: inode 的链接数。

st_uid: 所有者的用户ID。

st_gid: 所有者的组ID。

st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。

st_atime: 上次访问的时间。

st_mtime: 最后一次修改的时间。

st_ctime: 由操作系统报告的”ctime”。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。

2.6.6 os.path.getsize

解释:返回path的大小有可能1024

例:输出字符串只是当前使用的平台

print(os.path.getsize(r’D:\python\untitled2\python_8\lession.py’))

print(os.path.getsize(r’D:\python\untitled2\python_借鉴\员工信息练习.py’))

print(os.path.getsize(r’D:\python\untitled2\lianxi\1.py’))

输出

C:\python3\python.exe
D:/python/untitled2/python_8/lession.py

3989

12861

1388

2.6.7 目录大小统计练习

#!/usr/bin/env python

# -*- coding:utf-8 -*-

import os

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

def get_dir_size(dir):

size = 0

for
root, dirs, files in os.walk(dir):

size
+= sum([os.path.getsize(os.path.join(root, name)) for name in files])

return
size

if __name__ == ‘__main__’:

size =
get_dir_size(‘../’)

print(‘Total size is: %.3f Mb’ % (size / 1024 / 1024))

2.7 re模块

2.7.1 解释:

正则表达式和python语言,是一个独立的语法

2.7.2 规则:

l  字符串的匹配

l  从一个巨大的字符串集合中

l  根据规则来找到想要的内容

l  或者判断是否符合你的规定

2.7.3 字符组


解释:

字符组 : [字符组]
在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示
字符分为很多类,比如数字、字母、标点等等。
假如你现在要求一个位置"只能出现一个数字",那么这个位置上的字符只能是0、1、2...9这10个数之一。

l  常用范围

数字:[0-9]

字母:[A-Za-z]

正则

待匹配字符

匹配
结果

说明

[0123456789]

8

True

在一个字符组里枚举合法的所有字符,字符组里的任意一个字符
和”待匹配字符”相同都视为可以匹配

[0123456789]

a

False

由于字符组中没有”a”字符,所以不能匹配

[0-9]

7

True

也可以用-表示范围,[0-9]就和[0123456789]是一个意思

[a-z]

s

True

同样的如果要匹配所有的小写字母,直接用[a-z]就可以表示

[A-Z]

B

True

[A-Z]就表示所有的大写字母

[0-9a-fA-F]

e

True

可以匹配数字,大小写形式的a~f,用来验证十六进制字符

2.7.4 字符:

元字符

匹配内容

.

匹配除换行符以外的任意字符

\w

匹配字母或数字或下划线

\s

匹配任意的空白符

\d

匹配数字

\n

匹配一个换行符

\t

匹配一个制表符

\b

匹配一个边界符

^

匹配字符串的开始

$

匹配字符串的结尾

\W

匹配非字母或数字或下划线

\D

匹配非数字

\S

匹配非空白符

a|b

匹配字符a或字符b

()

匹配括号内的表达式,也表示一个组

[…]

匹配字符组中的字符

[^…]

匹配除了字符组中字符的所有字符

2.7.5 量词:

量词

用法说明

*

重复零次或更多次

+

重复一次或更多次

?

重复零次或一次

{n}

重复n次

{n,}

重复n次或更多次

{n,m}

重复n到m次

2.7.6 . ^ $

正则

待匹配字符

匹配
结果

说明

海.

海燕海娇海东

海燕海娇海东

匹配所有”海.”的字符

^海.

海燕海娇海东

海燕

只从开头匹配”海.”

海.$

海燕海娇海东

海东

只匹配结尾的”海.$”

2.7.7 * + ? {
}

正则

待匹配字符

匹配
结果

说明

李.?

李杰和李莲英和李二棍子

李杰
李莲
李二

?表示重复零次或一次,即只匹配”李”后面一个任意字符

李.*

李杰和李莲英和李二棍子

李杰和李莲英和李二棍子

*表示重复零次或多次,即匹配”李”后面0或多个任意字符

李.+

李杰和李莲英和李二棍子

李杰和李莲英和李二棍子

+表示重复一次或多次,即只匹配”李”后面1个或多个任意字符

李.{1,2}

李杰和李莲英和李二棍子

李杰和
李莲英
李二棍

{1,2}匹配1到2次任意字符

注意:前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配

正则

待匹配字符

匹配
结果

说明

李.*?

李杰和李莲英和李二棍子



2.7.8 字符集[][^]

正则

待匹配字符

匹配
结果

说明

李[杰莲英二棍子]*

李杰和李莲英和李二棍子

李杰
李莲英
李二棍子

表示匹配”李”字后面[杰莲英二棍子]的字符任意次

李[^和]*

李杰和李莲英和李二棍子

李杰
李莲英
李二棍子

表示匹配一个不是”和”的字符任意次

[\d]

456bdha3

4
5
6
3

表示匹配任意一个数字,匹配到4个结果

[\d]+

456bdha3

456
3

表示匹配任意个数字,匹配到2个结果

2.7.9 分组 ()与 或 |[^]

身份证号码是一个长度为15或18个字符的字符串,如果是15位则全部

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,147
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,618
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,461
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,236
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,871
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,953