云计算学习day35
回顾
1 函数的参数
形参
- 位置参数
- 默认参数
def foo(x, y=10):
pass
x :形参
y : 默认参数 ( 有默认值)
- 实参
- 位置参数
- 关键字参数
foo(1, 3)
foo(y=3, x=5)
万能参数/ 可变长参数
*args # () 接收 位置参数
**kwargs # {} 接受 关键字参数
2 函数返回值
所有函数都有返回值: 默认是 None
可以通过 return 指定返回的数据返回的数据可以是零到多个任意的 Python 数据对象
3 格式化输出
%
'{}'.format()
name="shark"
f'{name}'
shell 命令中的 printf
In [3]: d = {'a': '1','b':'2'}
In [4]: d
Out[4]: {'a': '1', 'b': '2'}
In [5]: s = '''A:10
...: B:20
...: C:30'''
In [6]: dd = {}
In [8]: for line in s.splitlines():
...: k, v = line.split(':')
...: k = k.lower()
...: if k in d:
...: new_k = d[k]
...: dd[new_k] = v
...: print(dd)
...:
{'1': '10'}
{'1': '10', '2': '20'}
正则表达式
一、预备知识正则
1. 正则介绍
Python 中的正则,本质上是嵌入在Python中的一种微小的、高度专业化的编程语言,可通过
re
这个内置模块获得。
正则表达式模式几乎和 shell 中的一样,更接近grep -P
的效果,因为 Python 中的re
模块提供的是类似 Perl 语言中的正则表达式。
正则表达式模式会被编译成一系列字节码,然后由用 C 编写的匹配引擎执行。
2. 陷阱
友情提示:
正则表达式语言相对较小且受限制,因此并非所有可能的字符串处理任务都可以使用正则表达式完成。
还有一些任务 可以 用正则表达式完成,但表达式变得非常复杂。 在这些情况下,你最好编写 Python 代码来进行处理;虽然 Python 代码比精心设计的正则表达式慢,但它也可能更容易理解。
3. 特殊的字符
在 Python 中有一些特殊的字符,在正则表达式模式中的作用和 shell 和 grep -P
时候有一些细微的差别
正则特殊字符 匹配内容 \w
匹配单个字母、数字、汉字(shell中没有)或下划线 类似于 [a-zA-Z0-9_]
\d
匹配单个数字 类似于 [0-9]
\s
匹配单个任意的空白符,这等价于 [ \t\n\r\f\v]
\S
匹配任何非空白字符, [ \t\n\r\f\v]
二、 re 模块的方法
其实,前面在 shell 中我们已经学习正则,这里我们主要学习的是 Python 中如何使用正则的,就是
re
模块中都有哪些方法。
接下来我们就学习几个常间的方法,更多请移步正则扩展知识完整版
1 常用方法
match() 就看开头有没有
只在整个字符串的起始位置进行匹配
示例字符串
s = "isinstance yangge enumerate www.qfedu.com 1997"
示例演示:
import re
In [4]: r = re.match("is\w+", s)
In [8]: r.group() # 获取匹配成功的结果
Out[8]: 'isinstance'
search() 只查到第一个匹配的
从整个字符串的开头找到最后,当第一个匹配成功后,就不再继续匹配。
In [9]: r = re.search("a\w+", s)
In [10]: r.group()
Out[10]: 'ance'
findall() 查到所有
搜索整个字符串,找到所有匹配成功的字符串,比把这些字符串放在一个列表中返回。
In [16]: r = re.findall("a\w+", s)
In [17]: r
Out[17]: ['ance', 'angge', 'ate']
sub() 替换
把匹配成功的字符串,进行替换。
# 语法:
"""
("a\w+", "100", s, 2)
匹配规则,替换成的新内容, 被搜索的对象, 有相同的话替换的次数
"""
In [24]: r = re.sub("a\w+", "100", s, 2)
In [25]: r
Out[25]: 'isinst100 y100 enumerate www.qfedu.com 1997'
# 模式不匹配时,返回原来的值
split() 分割
和 awk -F '[d]'
一样效果,以匹配到的字符进行分割,返回分割后的列表
In [26]: s
Out[26]: 'isinstance yangge enumerate www.qfedu.com 1997'
In [27]: r = re.split("a", s, 1)
使用多个界定符分割字符串
>>> line = 'asdf fjdk; afed, fjek,asdf, foo'
>>> import re
>>> re.split('[;,\s]\s*', line)
['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']
2. 正则分组
就是从已经成功匹配的内容中,再去把想要的取出来
grep -E xx 匹配
grep -o 匹配值按列显示