Python 常用库和方法
库
re
match对象
Match对象是一次匹配的结果,包含匹配的很多信息
属性
属性 | 说明 |
---|---|
.string | 待匹配的文本 |
.re | 匹配时使用的patter对象(正则表达式) |
.pos | 正则表达式搜索文本的开始位置 |
.endpos | 正则表达式搜索文本的结束位置 |
方法
方法 | 说明 |
---|---|
.group(0) | 获得匹配后的字符串 |
.start() | 匹配字符串在原始字符串的开始位置 |
.end() | 匹配字符串在原始字符串的结束位置 |
.span() | 返回(.start(), .end()) |
修饰符
修饰符 | 描述 |
---|---|
re.I | 使匹配对大小写不敏感 |
re.L | 做本地化识别(locale-aware)匹配 |
re.M | 多行匹配,影响 ^ 和 $ |
re.S | 使 . 匹配包括换行在内的所有字符 |
re.U | 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. |
re.X | 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 |
主要方法
函数 | 说明 |
---|---|
re.search() | 从一个字符串中搜索匹配正则表达式的==第一个==位置,返回==match对象== |
re.match() | 从一个字符串的开始位置起匹配正则表达式,返回match对象 |
re.findall() | 搜索字符串,以==列表==类型返回==全部==能匹配的子串 |
re.split() | 将一个字符串按照正则表达式匹配结果进行==分割==,返回==列表==类型 |
re.finditer() | 搜索字符串,返回一个匹配结果的迭代类型,==每个迭代元素是match对象== |
re.sub() | 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串 |
re.compile() | compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。 |
正则表达式
操作符 | 说明 | 实例 |
---|---|---|
. | 表示任何单个字符(默认除换行符) | |
[] | 字符集,对单个字符给出取值范围 | [abc]表示a、b、c,[a-z]表示a到z的单个字符 |
[^] | 非字符集,对单个字符给出排除范围 | [^abc]表示非a或非b或非c的单个字符 |
* | 前一个字符==0次或无限次==扩展,*等价于 {0,} |
abc*表示ab、abc、abcc、abccc等 |
+ | 前一个字符==1次或无限次==扩展,+等价于 {1,} |
abc+表示abc、abcc、abccc等 |
? | 前一个字符==0次或1次==扩展;当使用非贪婪模式,我们要在表达式后面加上 ? 号。 |
abc*表示ab、abc |
| | 左右表达式任意一个 | abc|def表示abc、def |
{m} | 扩展前一个字符m次 | ab{2}c表示abbc |
{m,n} | 扩展前一个字符m至n次(含n) | ab{1,2}c表示abc,abbc |
^ | 匹配字符串开头 | abc且在一个字符串的开头 |
$ | 匹配字符串结尾 | abc且在一个字符串的结尾 |
() | 分组标记,内部只能使用|操作符 | (abc)表示abc,(abc|def)表示abc、def |
\d | 数字,等价于[0-9] | |
\w | 单词字符,等价于’[A-Za-z0-9_] ’。 |
|
\s | 快捷方式可以匹配空白字符 | |
\b | 匹配的是单词的边界 | |
大写取反 | 快捷方式大写可以取反 | \D匹配一个非数字字符。等价于 [^0-9]。 |
经典实例
正则表达式 | 意义 |
---|---|
^[A-Za-z]+$ | 由26个字母组成的字符串 |
^[A-Za-z0-9]+$ | 由26个字母和数字组成的字符串 |
^-?\d+$ | 整数形式的字符串 |
^ [1-9]*[0-9]*$ | 正整数形式的字符串 |
[1-9]\d{5} | 中国境内邮政编码,6位 |
[\u4e00-\u9fa5] | 匹配中文字符 |
\d{3}-\d{8}|\d{4}-\d{7} | 国内电话号码 3位-8位或4位-7位 |
例子
import re
line = 'order date: 31-08-2019 delivery date: 15-09-2019'
pattern = r'\d{1,2}-\d{1,2}-\d{4}'
rs = re.finditer(pattern, line)
for r in rs:
print(r.group()) 匹配到的
print(r.span()) 切片范围
print(r.start(), r.end()) 开始和结束的范围
31-08-2019
(12, 22)
12 22
15-09-2019
(39, 49)
39 49
math
数学常量:
math.pi:π的值,约为 3.141592653589793。
math.e:自然常数 e 的值,约为 2.718281828459045。
math.inf:正无穷大的表示方式。
math.nan:非数字的表示方式。
对数和指数函数:
math.log(x):求以 e 为底数的自然对数。
math.log10(x):求以 10 为底数的对数。
math.exp(x):求 e 的 x 次幂。
math.pow(x, y):求 x 的 y 次幂。
数值函数:
math.sqrt(x):求平方根。
math.floor(x):求不大于 x 的最大整数。
math.ceil(x):求不小于 x 的最小整数。
math.trunc(x):求 x 的整数部分。
math.fmod(x, y):求 x 除以 y 的余数。
其他函数:
math.degrees(x):将 x 从弧度转换为角度。
math.radians(x):将 x 从角度转换为弧度。
math.hypot(x, y):求直角三角形的斜边长度。
math.isfinite(x):判断 x 是否为有限数。
math.isinf(x):判断 x 是否为正无穷大或负无穷大。
math.isnan(x):判断 x 是否为非数字。
math.factorial(x):求 x 的阶乘。
三角函数:
math.sin(x):求正弦值。
math.cos(x):求余弦值。
math.tan(x):求正切值。
math.asin(x):求反正弦值。
math.acos(x):求反余弦值。
math.atan(x):求反正切值。
math.atan2(y, x):求以弧度为单位的反正切值。
fractions
是Python中一个内置模块,用于处理有理数。比如想表示五分之一这种的。
Fraction():创建一个有理数对象。
gcd(a, b):计算a和b的最大公约数。
Fraction.from_float(f):将一个浮点数f转换为最简分数的有理数。
Fraction.limit_denominator(max_denominator=1000000):返回最接近当前有理数且分母不超过max_denominator的有理数。
Fraction.numerator:返回有理数的分子。
Fraction.denominator:返回有理数的分母。
Fraction.__float__():将有理数转换为浮点数。
Fraction.__str__():将有理数转换为字符串。
Fraction.__eq__(other):判断两个有理数是否相等。
Fraction.__lt__(other):判断一个有理数是否小于另一个有理数。
Fraction.__add__(other):将一个有理数加上另一个有理数。
Fraction.__sub__(other):将一个有理数减去另一个有理数。
Fraction.__mul__(other):将一个有理数乘以另一个有理数。
Fraction.__truediv__(other):将一个有理数除以另一个有理数。
Fraction.__pow__(n):将一个有理数的n次幂。
import fractions
m = 0
for i in range(4,10):
m += fractions.Fraction(1,i)
等价于
1-1/4-1/5......-1/9
itertools
itertools.chain():将多个迭代器连接成一个迭代器。
itertools.combinations():返回可迭代对象中所有长度为 n 的组合。
itertools.count():从指定的起始数字开始返回连续的数字。
itertools.cycle():将一个可迭代对象无限重复。
itertools.dropwhile():返回可迭代对象中第一个不符合条件的元素之后的所有元素。
itertools.groupby():将可迭代对象分组,返回一个由键值对组成的迭代器。
itertools.islice():返回可迭代对象的切片。
itertools.permutations():返回可迭代对象中所有长度为 n 的排列。
itertools.product():返回可迭代对象的笛卡尔积。
itertools.repeat():重复一个元素若干次,返回一个迭代器。
from itertools import permutations
a=[1,2,3]
for i in permutations(a):
print(i)
(1, 2, 3)
(1, 3, 2)
(2, 1, 3)
(2, 3, 1)
(3, 1, 2)
(3, 2, 1)
datetime
datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0):创建一个 datetime 对象,表示一个日期和时间。参数 year、month 和 day 表示日期,参数 hour、minute、second 和 microsecond 表示时间,默认为 0。
datetime.date(year, month, day):创建一个 date 对象,表示一个日期。参数 year、month 和 day 表示日期。
datetime.time(hour=0, minute=0, second=0, microsecond=0):创建一个 time 对象,表示一个时间。参数 hour、minute、second 和 microsecond 表示时间,默认为 0。
datetime.datetime.now():返回当前日期和时间的 datetime 对象。
datetime.datetime.today():返回当前日期和时间的 datetime 对象(同 datetime.datetime.now())。
datetime.datetime.strptime(date_string, format):将一个字符串按照指定的格式转换为 datetime 对象。参数 date_string 是要转换的字符串,参数 format 是转换格式。
datetime.datetime.strftime(format):将一个 datetime 对象按照指定的格式转换为字符串。参数 format 是转换格式。
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0):创建一个时间差对象,表示两个时间之间的差距。参数 days、seconds、microseconds、milliseconds、minutes、hours 和 weeks 分别表示相差的天数、秒数、微秒数、毫秒数、分钟数、小时数和周数。
datetime.datetime.date():返回 datetime 对象所表示的日期的 date 对象。
datetime.datetime.time():返回 datetime 对象所表示的时间的 time 对象。
datetime.datetime.timestamp():返回 datetime 对象所表示的 Unix 时间戳。
datetime.datetime.fromtimestamp(timestamp):将一个 Unix 时间戳转换为 datetime 对象。
datetime.datetime.combine(date, time):将一个 date 对象和一个 time 对象合并为一个 datetime 对象。
datetime.datetime.astimezone(tz=None):将一个 datetime 对象转换为指定时区的时间。参数 tz 是一个 tzinfo 对象,表示目标时区。
datetime.datetime.replace(year=None, month=None, day=None, hour=None, minute=None, second=None, microsecond=None, tzinfo=None):创建一个新的 datetime 对象,将指定的属性替换为新的值。
datetime.datetime.weekday():返回 datetime 对象所表示的日期是星期几(0 表示星期一,6 表示星期日)。
string
uuid
random
抽奖
>>> import random
>>> values = [1, 2, 3, 4, 5, 6]
>>> random.choice(values)
2
>>> random.choice(values)
3
>>> random.choice(values)
1
>>> random.choice(values)
4
>>> random.choice(values)
6
>>>
提取
>>> random.sample(values, 2)
[6, 2]
>>> random.sample(values, 2)
[4, 3]
>>> random.sample(values, 3)
[4, 3, 1]
>>> random.sample(values, 3)
[5, 4, 1]
>>>
打乱顺序
>>> random.shuffle(values)
>>> values
[2, 4, 6, 5, 3, 1]
>>> random.shuffle(values)
>>> values
[3, 5, 2, 1, 6, 4]
>>>
生成随机整数
>>> random.randint(0,10)
2
>>> random.randint(0,10)
5
>>> random.randint(0,10)
0
>>> random.randint(0,10)
7
>>> random.randint(0,10)
10
>>> random.randint(0,10)
3
>>>
生成0到1范围内浮点数
>>> random.random()
0.9406677561675867
>>> random.random()
0.133129581343897
>>> random.random()
0.4144991136919316
>>>
方法
len
返回字符串、列表、字典、元组等长度
split
语法:str.split(str="",num=string.count(str))[n]
参数说明: str:表示为分隔符,==默认为空格==,但是不能为空(’’)。若字符串中没有分隔符,则把整个字符串作为列表的一个元素 num:表示分割次数。如果存在参数num,则仅分隔成 num+1 个子字符串,并且每一个子字符串可以赋给新的变量
n:表示选取第n个分片
注意:当使用空格作为分隔符时,对于中间为空的项会自动忽略
input().split()
map
map(function,iterable,…) 第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个==集合==。
map不改变原list,而是返回一个==新==list。
del square(x):
return x ** 2
map(square,[1,2,3,4,5])
# 结果如下:
[1,4,9,16,25]
a,b,c=map(int,input().split())
zip
zip()
是一个内置函数,用于将多个可迭代对象(如列表、元组等)的对应元素打包成==元组==的序列。它返回一个迭代器,可以用于遍历这些打包后的元组序列。
列表合并转字典
teams = ["A", "B", "C", "D"]
captains = ["X","Y","Z"]
ziplist = list(zip(teams,captains))
zipdict = dict(zip(teams,captains))
sort&sorted
都用来排序列表,不同的是sort直接改变原列表,sorted是返回新的列表
ord
返回字符的ascii值
join
str.join(sequence)
sequence -- 要连接的元素序列。
parts = ['Is', 'Chicago', 'Not', 'Chicago?']
>>> ' '.join(parts)
'Is Chicago Not Chicago?'
>>> ','.join(parts)
'Is,Chicago,Not,Chicago?'
>>> ''.join(parts)
'IsChicagoNotChicago?'
count
str.count(sub, start= 0,end=len(string))
- sub – 搜索的子字符串
- start – 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。
- end – 字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置。
该方法返回子字符串在字符串中出现的次数。
dedupe
消除重复元素
>>> a = [1, 5, 2, 1, 9, 1, 5, 10]
>>> list(dedupe(a))
[1, 5, 2, 9, 10]
replace
Python replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。
str.replace(old, new[, max])
- old – 将被替换的子字符串。
- new – 新字符串,用于替换old子字符串。
- max – 可选字符串, 替换不超过 max 次
startswith
startswith()
是 Python 字符串对象的一个内置方法,用于检查字符串是否以指定的前缀开头。它的语法如下:
python
复制
str.startswith(prefix[, start[, end]])
其中,str
是要检查的字符串对象,prefix
是要检查的前缀字符串。可选的参数 start
和 end
指定了要在字符串中进行检查的起始和结束位置,默认为整个字符串。
startswith()
方法返回一个布尔值,如果字符串以指定的前缀开头,则返回 True
,否则返回 False
。