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.141592653589793math.e自然常数 e 的值约为 2.718281828459045math.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 对象表示一个日期和时间参数 yearmonth  day 表示日期参数 hourminutesecond  microsecond 表示时间默认为 0
datetime.date(year, month, day):创建一个 date 对象表示一个日期参数 yearmonth  day 表示日期
datetime.time(hour=0, minute=0, second=0, microsecond=0):创建一个 time 对象表示一个时间参数 hourminutesecond  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):创建一个时间差对象表示两个时间之间的差距参数 dayssecondsmicrosecondsmillisecondsminuteshours  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 是要检查的前缀字符串。可选的参数 startend 指定了要在字符串中进行检查的起始和结束位置,默认为整个字符串。

startswith() 方法返回一个布尔值,如果字符串以指定的前缀开头,则返回 True,否则返回 False

0%