re模块

正则表达式:

字符组: [字符组]

在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示

字符分为很多类,比如数字、字母、标点等等。

假如你现在要求一个位置"只能出现一个数字",那么这个位置上的字符只能是0、1、2...9这10个数之一。

[A-Za-z0-9]

元字符:

元字符

匹配内容

元字符

匹配内容

.

匹配除换行以外的所有字符

$

匹配字符串的结尾

\w

匹配字母或数字或下划线

\W

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

\s

匹配任意的空白符

\D

匹配非数字

\d

匹配数字

\S

匹配非空白符

\n

匹配一个换行符

a|b

匹配字符a或在字符b

\t

匹配一个制表符

()

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

\b

匹配一个单词的结尾

[…]

匹配字符组中字符

^

匹配字符串的开始

[^…]

匹配出来字符组中字符的所有字符

量词:

量词

用法说明

量词

用法说明

*

重复0次或更多次

{n}

重复n次

+

重复1次或更多次

{n,}

重复n次或多次

?

重复1次或0次

{n,m}

重复n到m次

.^$

正则

待匹配字符

匹配结果

说明

海.

海燕海娇海东

海燕海娇海东

匹配所有"海."的字符

^海.

海燕海娇海东

海燕

只从开头匹配"海."'

海.$

海燕海娇海东

海东

只匹配结尾的"海."

*+?{ }

正则

待匹配字符

匹配结果

说明

李.?

李杰和李莲英和李二棍子

李杰

李连

李二

?表示重复0次或1次,即只匹配李后面一个字符

李.*

李杰和李莲英和李二棍子

李杰和李莲英和李二棍子

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

李.+

李杰和李莲英和李二棍子

李杰和李莲英和李二棍子

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

李.{1,2}

李杰和李莲英和李二棍子

李杰和

李莲英

李二棍

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

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

正则

待匹配字符

匹配结果

说明

李.*?

李杰和李莲英和李二棍子

惰性匹配

字符集[ ] [^]

正则

待匹配字符

匹配结果

说明

李[杰莲英二棍子]*

李杰和李莲英和李二棍子

李杰
李莲英
李二棍子

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

李[^和]*

李杰和李莲英和李二棍子

李杰
李莲英
李二棍子

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

[\d]

456bdha3

4
5
6
3

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

[\d]+

456bdha3

456
3

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

分组 ()与或|[^]

正则

待匹配字符

匹配结果

说明

^[1-9]\d{13,16}[0-9x]$

110101198001017032

110101198001017032

表示可以匹配一个正确的身份证号

^[1-9]\d{13,16}[0-9x]$

1101011980010170

1101011980010170

表示也可以匹配这串数字,但这并不是一个正确的身份证号码,它是一个16位的数字

^[1-9]\d{14}(\d{2}[0-9x])?$

1101011980010170

False

现在不会匹配错误的身份证号了()表示分组,将\d{2}[0-9x]分成一组,就可以整体约束他们出现的次数为0-1次

^([1-9]\d{16}[0-9x]|[1-9]\d{14})$

110105199812067023

110105199812067023

表示先匹配[1-9]\d{16}[0-9x]如果没有匹配上就匹配[1-9]\d{14}

身份证号码是一个长度为15或18个字符的字符串,如果是15位则全部?️数字组成,首位不能为0;如果是18位,则前17位全部是数字,末位可能是数字或x,

转义符 \

在正则表达式中,有很多有特殊意义的是元字符,比如\n和\s等,如果要在正则中匹配正常的"\n"而不是"换行符"就需要对"\"进行转义,变成'\\'。

在python中,无论是正则表达式,还是待匹配的内容,都是以字符串的形式出现的,在字符串中\也有特殊的含义,本身还需要转义。所以如果匹配一次"\n",字符串中要写成'\\n',那么正则里就要写成"\\\\n",这样就太麻烦了。这个时候我们就用到了r'\n'这个概念,此时的正则是r'\\n'就可以了。

正则

待匹配字符

匹配结果

说明

\n

\n

False

因为在正则表达式中\是有特殊意义的字符,所以要匹配\n本身,用表达式\n无法匹配

\\n

\n

True

转义\之后变成\\,即可匹配

"\\\\n"

'\\n'

True

如果在python中,字符串中的'\'也需要转义,所以每一个字符串'\'又需要转义一次

r'\\n'

r'\n'

True

在字符串之前加r,让整个字符串不转义

贪婪匹配

贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配

正则

待匹配字符

匹配结果

说明

<.*>

<script>...<script>

<script>...<script>

默认为贪婪匹配模式,会匹配尽量长的字符串

<.*?>

<script>...<script>

<script>
<script>

加上?为将贪婪匹配模式转为非贪婪匹配模式,会匹配尽量短的字符串

几个常用的非贪婪匹配Pattern

*? 重复任意次,但尽可能少重复

+? 重复1次或更多次,但尽可能少重复

?? 重复0次或1次,但尽可能少重复

{n,m}? 重复n到m次,但尽可能少重复

{n,}? 重复n次以上,但尽可能少重复

.*?的用法

. 是任意字符

* 是取 0 至 无限长度

? 是非贪婪模式。

何在一起就是 取尽量少的任意字符,一般不会这么单独写,他大多用在:

.*?x

就是取前面任意长度的字符,直到一个x出现

re模块下的常用方法

findall('a','eva egon yuan'),返回列表

search() 从前往后,找到一个就返回,返回一个对象,需要.group()才能返回结果,如果没有找到,那么返回none,调用group会出错

match() match是从头开始匹配,,如果从头开始匹配上,就返回一个变量,匹配的内容也需要group()才能显示结果,如果没匹配上,就返回none,调用group会出错

split()

sub()

subn()

compile()

collections模块

在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等。

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

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

3.Counter: 计数器,主要用来计数

4.OrderedDict: 有序字典

5.defaultdict: 带有默认值的字典

namedtuple

namedtuple 表示坐标:二维坐标,三维坐标,圆坐标

  1. from collections import namedtuple  
  2. Point = namedtuple('point',['x','y','z'])  
  3. p1 = Point(1,2,3)  
  4. p2 = Point(3,2,1)  
  5. print(p1.x)  
  6. print(p1.y)  
  7. print(p1,p2)  
  8. #打印结果  
  9. 1  
  10. 2  
  11. point(x=1, y=2, z=3) point(x=3, y=2, z=1)  

队列queue

先进先出

  1. import queue  
  2. q = queue.Queue()  
  3. q.put([1,2,3])   #存值  
  4. q.put(5)  
  5. q.put(6)  
  6. print(q.get())#取值  
  7. print(q.get())  
  8. print(q.get())  
  9. print(q.qsize())#查看有几个值 

双端队列deque

使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。

deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:

  1. from collections import deque  
  2. dq = deque([1,2])  
  3. dq.append('a')   # 从后面放数据  [1,2,'a']  
  4. dq.appendleft('b') # 从前面放数据 ['b',1,2,'a']  
  5. dq.insert(2,3)    #['b',1,3,2,'a']  
  6. print(dq.pop())      # 从后面取数据  
  7. print(dq.pop())      # 从后面取数据  
  8. print(dq.popleft())  # 从前面取数据  
  9. print(dq)  

deque除了实现list的append()和pop()外,还支持appendleft()和popleft(),这样就可以非常高效地往头部添加或删除元素。

deque

使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。

deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:

  1. from collections import deque  
  2. l = ['a','b','c','d']  
  3. q = deque(l)  
  4. q.append('y')  
  5. q.appendlet('x')  
  6. print(q)  

deque除了实现list的append()和pop()外,还支持appendleft()和popleft(),这样就可以非常高效地往头部添加或删除元素。

OrderedDict

使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。

如果要保持Key的顺序,可以用OrderedDict:

random模块

import random

#随机小数

>>> random.random() # 大于0且小于1之间的小数

0.7664338663654585

>>> random.uniform(1,3) #大于1小于3的小数

1.6270147180533838

#随机整数

>>> random.randint(1,5) # 大于等于1且小于等于5之间的整数

>>> random.randrange(1,10,2) # 大于等于1且小于10之间的奇数

#随机选择一个返回

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

#随机选择多个返回,返回的个数为函数的第二个参数

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

[[4, 5], '23']

#打乱列表顺序

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

>>> random.shuffle(item) # 打乱次序

>>> item

[5, 1, 3, 7, 9]

>>> random.shuffle(item)

>>> item

[5, 9, 7, 1, 3]

注:字典key是无序的在py3.5及以下成立,py3.6往上版本改变了字典的存储算法,字典是有序的。

Count

Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。

Time模块

表时间的三种方式:

  1. 字符串

    格式化的时间字符串(Format String): '1999-12-06'

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

%% %号本身

  1. 时间戳

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

  2. 元组

    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

  1. #时间戳  
  2. a = time.time()  
  3. print(a)           #1543313186.320829  
  4. #字符串  
  5. b = time.strftime("%Y-%m-%d %H-%M-%S")  
  6. print(b)        #2018-11-27 18-06-26  
  7. #元组  
  8. c = time.localtime()  
  9. print(c)  #time.struct_time(tm_year=2018, tm_mon=11, tm_mday=27, tm_hour=18,   tm_min=6, tm_sec=26, tm_wday=1, tm_yday=331, tm_isdst=0)  

几种格式之间转换

  1. import time  
  2. #时间戳-->结构化时间  
  3. #time.gmtime(时间戳)    #UTC时间,与英国伦敦当地时间一致  
  4. #time.localtime(时间戳) #当地时间。例如我们现在在北京执行这个方法:与UTC时间相差8小时,UTC时间+8小时 = 北京时间  
  5. a = time.gmtime(1600000000)  
  6. b = time.localtime(time.time())  
  7. print(a)  
  8. print(b)  
  9. #结构化时间-->时间戳   
  10. #time.mktime(结构化时间)  
  11. time_tuple = time.localtime(time.time())  
  12. c = time.mktime(time_tuple)  
  13. print(c)  
  14. #结构化时间-->字符串时间  
  15. #time.strftime("格式定义","结构化时间")  结构化时间参数若不传,则显示当前时间  
  16. print(time.strftime("%Y-%m-%d %X"))  
  17. print(time.strftime("%Y-%m-%d",time.localtime(1500000000)))  
  18. #字符串时间-->结构化时间  
  19. #time.strptime(时间字符串,字符串对应格式)  
  20. print(time.strptime("2017-03-16","%Y-%m-%d"))  
  21. print(time.strptime("07/24/2017","%m/%d/%Y"))  

结构化时间与时间戳向字符串时间的种转变

  1. import time  
  2. #结构化时间 --> %a %b %d %H:%M:%S %Y串  
  3. #time.asctime(结构化时间) 如果不传参数,直接返回当前时间的格式化串  
  4. print(time.asctime(time.localtime(1500000000)))  
  5. print(time.asctime())  
  6. #时间戳 --> %a %b %d %H:%M:%S %Y串  
  7. #time.ctime(时间戳)  如果不传参数,直接返回当前时间的格式化串  
  8. print(time.ctime())  
  9. print(time.ctime(1500000000))  

Random模块

注:验证码实现

os模块

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

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.system("bash command") 运行shell命令,直接显示

os.popen("bash command).read() 运行shell命令,获取执行结果

os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径

os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd

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

sys模块

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

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

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

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

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

序列化模块

方法

意义

random.random()

大于0小于1的小数

random.uniform(a,b)

大于a小于b的小数

random.randint(a,b)

[ a , b )

random.randrange(1,10,2)

大于等于1切小于10之间奇数

random.choice()

随机选择一个返回

random.sample(iter,n)

多个返回,返回的个数为n参数

random.shuffle(item)

打乱次序

什么叫序列化:将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化

序列化的目的

1、以某种存储形式使自定义对象持久化;

2、将对象从一个地方传递到另一个地方。

3、使程序更具维护性。

系列化:数据结构----------------------字符串

反系列化: 字符串------------数据结构

json

Json模块提供了四个功能:dumps、dump、loads、load

pickle

pickle模块提供了四个功能:dumps、dump(序列化,存)、loads(反序列化,读)、load  (不仅可以序列化字典,列表...可以把python中任意的数据类型序列化

转载于:https://www.cnblogs.com/chenrongjin/p/10029438.html

11-Python基础之模块相关推荐

  1. python基础之模块之os模块

    python基础之模块之os模块 os模块 os模块的作用: os,语义为操作系统,所以肯定就是操作系统相关的功能了,可以处理文件和目录这些我们日常手动需要做的操作,就比如说:显示当前目录下所有文件/ ...

  2. 用于生成随机数的python标准库模块是_详解Python基础random模块随机数的生成

    详解Python基础random模块随机数的生成 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  详解Python基础random模块随机数的生成.txt ] ( ...

  3. python基础——使用模块

    python基础--使用模块 Python本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用. 我们以内建的sys模块为例,编写一个hello的模块: #!/usr/bin/env ...

  4. python random库生成伯努利随机数的方法_详解Python基础random模块随机数的生成

    随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等.Python内置的random模块提供了生成随机数的方法,使用这些方法时需要导入ran ...

  5. Python基础之模块和包

    Python基础之模块和包 本节将介绍Python中的模块和包的概念及基本用法. 模块 简单来说模块就是一个python文件,我们可以将一些常量.函数.类等封装到一个模块中,然后在程序中使用该模块.模 ...

  6. 刻意练习:Python基础 -- Task12. 模块

    背景 我们准备利用17天时间,将 "Python基础的刻意练习" 分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task0 ...

  7. 带你学python基础:模块和包

    一.什么是模块 在我们平时的开发过程中,或多或少会用到 Python 的一些内置的功能,或者说,还会用到一些第三方的库,我们用到的这些 Python 的内置的功能,和一些第三方的库,就可以说是一些模块 ...

  8. Python 基础 - 第三方模块PyYAML

    目录 1. yaml基本示例 2. yaml组织结构 3. pyyaml的安装 4. 读取 / 写入单个yaml文件 5. 读取 / 写入多yaml文件 yaml官方文档:YAML Ain't Mar ...

  9. 1.7 Python基础知识 - 模块初识

    在Python中有很多模块,模块对应的就是python源代码文件.模块中有Python程序自己附带的标准模块,还有很多其他人共享的第三方模块.模块中可以定义变量.函数和类.而多个功能类似的模块可以组织 ...

  10. python基础--自定义模块、import、from......import......

    自定义模块.import.from......import...... 1)模块的定义和分类 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例 ...

最新文章

  1. Excel宏的易错点
  2. mysql 压力测试之批量插入自增字段不连续问题
  3. 牛客网题目——不用四则运算符号,计算两个数字的和
  4. html5 svg 拖拽,SVG拖动
  5. c++ 获取时间戳_分布式系统理论基础三-时间、时钟和事件顺序
  6. ubuntu server安装hadoop和spark,并设置集群
  7. redis的zset的底层实现_redis zset底层实现原理
  8. 模块d3d12.dll加载失败_语音控制模块
  9. vSphere 5.5 使用Web Client打开控制台窗口显示连接超时
  10. 39基础数据结构:动态数组
  11. 51单片机外设篇:电机
  12. java反应器构型_27种反应器的结构及原理,你想了解的都在这里
  13. vue typeScript get set 用法
  14. JavaScript:实现NQueen皇后问题算法(附完整源码)
  15. 矩阵的生成及对角线运算
  16. Eclipse下载与安装教程(最简单版)
  17. mysql rand_mysql rand()产生随机整数范围及方法
  18. 权重衰减 weight_decay 是个啥
  19. ios开发——实用技术篇Block/KVO/通知/代理
  20. 苹果vs剪辑下载_好用的短视频制作与剪辑APP工具盘点

热门文章

  1. H5 新标签用法及解释
  2. QT5利用chromium内核与HTML页面交互
  3. Individual Project-——word_frequency——final requirement
  4. 【.NET程序性能分析】使用VS自带的工具分析.NET程序的性能
  5. Excel实战技巧之[活用条件格式]
  6. 《LeetCode力扣练习》第136题 只出现一次的数字 Java
  7. python解析json_python解析json文件
  8. 浙江大学计算机考研大纲,2018年浙江大学研究生入学考试《计算机学科专业基础》(878)考试大纲...
  9. linux操作入门,Linux基础操作
  10. python搭建可视化管理平台_搭建可视化数据平台 superset