11-Python基础之模块
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 |
表示匹配任意一个数字,匹配到4个结果 |
[\d]+ |
456bdha3 |
456 |
表示匹配任意个数字,匹配到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 |
|
^([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> |
加上?为将贪婪匹配模式转为非贪婪匹配模式,会匹配尽量短的字符串 |
几个常用的非贪婪匹配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 表示坐标:二维坐标,三维坐标,圆坐标
|
队列queue
先进先出
|
双端队列deque
使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。
deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:
|
deque除了实现list的append()和pop()外,还支持appendleft()和popleft(),这样就可以非常高效地往头部添加或删除元素。
deque
使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。
deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:
|
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模块
表时间的三种方式:
- 字符串
格式化的时间字符串(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 当前时区的名称 %% %号本身 |
- 时间戳
时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行"type(time.time())",返回的是float类型。
- 元组
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 |
|
几种格式之间转换
|
结构化时间与时间戳向字符串时间的种转变
|
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.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基础之模块相关推荐
- python基础之模块之os模块
python基础之模块之os模块 os模块 os模块的作用: os,语义为操作系统,所以肯定就是操作系统相关的功能了,可以处理文件和目录这些我们日常手动需要做的操作,就比如说:显示当前目录下所有文件/ ...
- 用于生成随机数的python标准库模块是_详解Python基础random模块随机数的生成
详解Python基础random模块随机数的生成 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: 详解Python基础random模块随机数的生成.txt ] ( ...
- python基础——使用模块
python基础--使用模块 Python本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用. 我们以内建的sys模块为例,编写一个hello的模块: #!/usr/bin/env ...
- python random库生成伯努利随机数的方法_详解Python基础random模块随机数的生成
随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等.Python内置的random模块提供了生成随机数的方法,使用这些方法时需要导入ran ...
- Python基础之模块和包
Python基础之模块和包 本节将介绍Python中的模块和包的概念及基本用法. 模块 简单来说模块就是一个python文件,我们可以将一些常量.函数.类等封装到一个模块中,然后在程序中使用该模块.模 ...
- 刻意练习:Python基础 -- Task12. 模块
背景 我们准备利用17天时间,将 "Python基础的刻意练习" 分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task0 ...
- 带你学python基础:模块和包
一.什么是模块 在我们平时的开发过程中,或多或少会用到 Python 的一些内置的功能,或者说,还会用到一些第三方的库,我们用到的这些 Python 的内置的功能,和一些第三方的库,就可以说是一些模块 ...
- Python 基础 - 第三方模块PyYAML
目录 1. yaml基本示例 2. yaml组织结构 3. pyyaml的安装 4. 读取 / 写入单个yaml文件 5. 读取 / 写入多yaml文件 yaml官方文档:YAML Ain't Mar ...
- 1.7 Python基础知识 - 模块初识
在Python中有很多模块,模块对应的就是python源代码文件.模块中有Python程序自己附带的标准模块,还有很多其他人共享的第三方模块.模块中可以定义变量.函数和类.而多个功能类似的模块可以组织 ...
- python基础--自定义模块、import、from......import......
自定义模块.import.from......import...... 1)模块的定义和分类 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例 ...
最新文章
- Excel宏的易错点
- mysql 压力测试之批量插入自增字段不连续问题
- 牛客网题目——不用四则运算符号,计算两个数字的和
- html5 svg 拖拽,SVG拖动
- c++ 获取时间戳_分布式系统理论基础三-时间、时钟和事件顺序
- ubuntu server安装hadoop和spark,并设置集群
- redis的zset的底层实现_redis zset底层实现原理
- 模块d3d12.dll加载失败_语音控制模块
- vSphere 5.5 使用Web Client打开控制台窗口显示连接超时
- 39基础数据结构:动态数组
- 51单片机外设篇:电机
- java反应器构型_27种反应器的结构及原理,你想了解的都在这里
- vue typeScript get set 用法
- JavaScript:实现NQueen皇后问题算法(附完整源码)
- 矩阵的生成及对角线运算
- Eclipse下载与安装教程(最简单版)
- mysql rand_mysql rand()产生随机整数范围及方法
- 权重衰减 weight_decay 是个啥
- ios开发——实用技术篇Block/KVO/通知/代理
- 苹果vs剪辑下载_好用的短视频制作与剪辑APP工具盘点
热门文章
- H5 新标签用法及解释
- QT5利用chromium内核与HTML页面交互
- Individual Project-——word_frequency——final requirement
- 【.NET程序性能分析】使用VS自带的工具分析.NET程序的性能
- Excel实战技巧之[活用条件格式]
- 《LeetCode力扣练习》第136题 只出现一次的数字 Java
- python解析json_python解析json文件
- 浙江大学计算机考研大纲,2018年浙江大学研究生入学考试《计算机学科专业基础》(878)考试大纲...
- linux操作入门,Linux基础操作
- python搭建可视化管理平台_搭建可视化数据平台 superset