python常用库

发布时间:2024年01月20日

常见模块解析

1. math库

数学函数
函数返回值 ( 描述 )
abs(x)返回数字的绝对值,如abs(-10) 返回 10
ceil(x)返回数字的上入整数,如math.ceil(4.1) 返回 5
cmp(x, y)如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。 **Python 3 已废弃,使用 (x>y)-(x。
exp(x)返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045
fabs(x)返回数字的绝对值,如math.fabs(-10) 返回10.0
floor(x)返回数字的下舍整数,如math.floor(4.9)返回 4
log(x)如math.log(math.e)返回1.0,math.log(100,10)返回2.0
log10(x)返回以10为基数的x的对数,如math.log10(100)返回 2.0
max(x1, x2,…)返回给定参数的最大值,参数可以为序列。
min(x1, x2,…)返回给定参数的最小值,参数可以为序列。
modf(x)返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。
pow(x, y)x**y 运算后的值。
round(x [,n])返回浮点数 x 的四舍五入值,如给出 n 值,则代表舍入到小数点后的位数。其实准确的说是保留值将保留到离上一位更近的一端。
sqrt(x)返回数字x的平方根。

三角函数

Python的math库包括以下三角函数:(比如:math.sin(math.pi/2))

函数描述
acos(x)返回x的反余弦弧度值。
asin(x)返回x的反正弦弧度值。
atan(x)返回x的反正切弧度值。
atan2(y, x)返回给定的 X 及 Y 坐标值的反正切值。
cos(x)返回x的弧度的余弦值。
hypot(x, y)返回欧几里德范数 sqrt(xx + yy)。
sin(x)返回的x弧度的正弦值。
tan(x)返回x弧度的正切值。
degrees(x)将弧度转换为角度,如degrees(math.pi/2) , 返回90.0
radians(x)将角度转换为弧度

数学常量
常量描述
math.pi数学常量 pi(圆周率,一般以π来表示)
math.e数学常量 e,e即自然常数(自然常数)。

2. random库

Python的random库包含以下常用随机数函数:

import random
# 生成一个 [0, 1) 范围内的随机小数
print(random.random())

# 生成一个 [1, 10] 范围内的随机整数
print(random.randint(1, 10))

# 生成一个 [0, 1] 范围内的随机小数
print(random.uniform(0, 1))

# 从序列中随机选择一个元素
seq = ['apple', 'banana', 'orange']
print(random.choice(seq))

# 将序列中的元素随机打乱(shuffle洗牌)
seq = [1, 2, 3, 4, 5]
random.shuffle(seq)
print(seq)

3. re 模块

1. 常用正则表达式
模式描述
\w匹配字母数字及下划线
\W匹配非字母数字下划线
\s匹配任意空白字符,等价于[\t,\n,\r,\f]
\S匹配任意非空字符
\d匹配任意数字,等价于[0-9]
\D匹配任意非数字
\A匹配以xx字符串开始
\Z匹配xx字符串结束,如果是存在换行,只匹配到换行前的结束字符串
\z匹配xx字符串结束
\G匹配最后匹配完成的位置
\n匹配一个换行符
\t匹配一个制表符
^匹配字符串的开头
$匹配字符串的末尾
.匹配任意字符, 除了换行符, 当 re.DOTALL 标记被指定时, 则可以匹配包括换行符的任意字符
[…]用来表示一组字符, 单独列出:[amk] 匹配 ‘a’,‘m’ 或 ‘k’
[^…]不在 [ ] 中的字符:[^abc] 匹配除了a, b, c之外的字符
*匹配0个或多个的表达式
+匹配1个或多个的表达式
?匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
{n}精确匹配n个前面表达式。
{n,m}匹配n到m次由前面的正则表达式定义的片段,贪婪方式
alb匹配a或b
()匹配括号内的表达式,也表示一个组

注意[ ]所有的特殊字符在字符集中都失去其原有的特殊含义,在字符集中如果要使用]-^,可以在前面加上反斜杠,或把]-放在第一个字符,把^放在非第一个字符

2. 常用函数
函数说明
re.match( )从字符串的起始位置匹配, 匹配成功, 返回一个匹配的对象, 否则返回None
re.search( )扫描整个字符串并返回第一个成功的匹配
re.findall( )在字符串中找到正则表达式所匹配的所有子串, 并返回一个列表, 如果没有找到匹配的, 则返回空列表
re.split( )将一个字符串按照正则表达式匹配结果进行分割, 返回列表类型
re.finditer( )在字符串中找到正则表达式所匹配的所有子串, 并把它们作为一个迭代器返回
re.sub( )把字符串中所有匹配正则表达式的地方替换成新的字符串
re.complie( )将正则表达式传入, 返回一个匹配对象, 一般与其他方法组合使用
3. 正则匹配使用示例
print("hello".replace("llo","ooo"))  # heooo
print("hello".find("abcd"))  # -1 (找不到返回 -1)
print("hello".find("he"))    # 0

import re
print(re.findall("\w","ab* 12$ _"))  # ['a', 'b', '1', '2', '_']
print(re.findall("\s","ab* 12$ _ "))  # [' ', ' ', ' ']
print(re.findall("\Aab","ab* 12$ _"))  # ['ab']
print(re.findall("\Aaa","ab* 12$ _"))  # [] 没匹配到为空
print(re.findall("_\Z","ab* 12$ _"))   # ['_']
print(re.findall("0\Z","ab* 12$ _"))   # [] 没匹配到为空
print(re.findall("\t","ab* 12$ \t_"))    # ['\t']
#"\s" 可以匹配"\t"和"\n"
print(re.findall("^ab","ab* 12$ _"))   # ['ab']
print(re.findall("_$","ab* 12$ _\n"))  # ['_']

重复匹配

#.匹配任意一个字符
import re
print(re.findall("a.b","a\tb")) # ['a\tb']
print(re.findall("a.b","a\nb")) # [] (换行符匹配不到,匹配为空)
print(re.findall("a.b","a b a*b abb a_b")) # ['a b', 'a*b', 'abb', 'a_b']
print(re.findall("a.b","a\nb",re.S))     # ['a\nb'] (加入参数, 包含换行)
print(re.findall("a.b","a\nb",re.DOTALL))   # ['a\nb'] (同上效果一样)

#* 匹配前面那个字符0个或者n个
print(re.findall("a*","aaaa aa"))# ['aaaa', '', 'aa', ''] (零个或多个a)
print(re.findall("ab*","abab aa"))# ['ab', 'ab', 'a', 'a'] (一个a零个或多个b)
print(re.findall("a*b","ababaaaba aa")) # ['ab', 'ab', 'aaab'] (零个或多个a一个b)
print(re.findall("ab*","bbbbbbbb"))  # [] (没有匹配到一个a零个或多个b)

#? 匹配前面那个字符0个或者1个
print(re.findall("ab?","a"))     # ['a'],匹配1个a,0个b
print(re.findall("ab?","abbb"))  # ['ab']

#{n,m} 匹配n~m个
print(re.findall("a{2}","aaaa"))     # ['aa', 'aa']
print(re.findall("ab{2,6}","abbb"))  # ['abbb'] (一个a,2~6个b)
print(re.findall("ab{1,}","abbb"))   # ['abbb'] (相当于 ab+)
print(re.findall("ab{0,}","abbb"))   # ['abbb'] (相当于 ab*)

#[ ]逐个匹配
print(re.findall("a[*1_c-]b","a*ba1b a_baaba-b")) # ['a*b', 'a1b', 'a_b', 'a-b']
print(re.findall("a[^a-zA-Z0-9]b","a*banb aPbaa7b"))  # ['a*b'] (非a~z,A~Z,0~9)

#( )分组
print(re.findall('ab+','ababab123')) # ['ab', 'ab', 'ab']
print(re.findall('(ab)+123','ababab123')) # ['ab'],匹配到末尾的 ab123 中的 ab
print(re.findall('(?:ab)+123','ababab123')) 
#['ababab123'], findall的结果不是匹配的全部内容,而是组内的内容, ?: 可以让结果为匹配的全部内容,详见非捕获匹配
print(re.findall('href="(.*?)"','<a href="http://www.baidu.com">点击</a>'))# ['http://www.baidu.com']
print(re.findall('href="(?:.*?)"','<a href="http://www.baidu.com">点击</a><a href="http://www.aiqiyi.com">点击2</a>'))
# ['href="http://www.baidu.com"', 'href="http://www.aiqiyi.com"']


print(re.findall("a\.b","a1b a.b"))  # ['a.b']
print(re.findall("shawn|song","shawn is man song is shawn"))  # ['shawn', 'song', 'shawn']
print(re.findall("A(?:abc|cba)A","AabcA"))  # ['AabcA']
print(re.findall("com(?:puter|e)","come on! Here is a computer "))  # ['come', 'computer']

#匹配所有数字
print(re.findall("\d+\.?\d*","12as3.45qw2k7"))  # ['12', '3.45', '2', '7']

贪婪匹配.*与懒惰匹配.*?

print(re.findall("a.*b","a11b22222b33"))  # ['a11b22222b']
print(re.findall("a.*?b","a11b22222b3"))  # ['a11b']
4. 方法示例
#re.findall(pattern,string)
	#在字符串中找到正则表达式所匹配的所有子串, 并返回一个列表, 如果没有找到匹配的, 则返回空列表
print(re.findall("(ab)+(cd)+","ababcdcd abcd"))
	#[('ab', 'cd'), ('ab', 'cd')],返回元组列表

#re.search()
	匹配整个字符串, 只到找到第一个匹配然后返回一个包含匹配信息的对象(re.Match对象)
	该对象可以通过调用 group()方法得到匹配的字符串,如果字符串没有匹配,则返回None
	如果没有匹配到值就调用 group() 方法, 抛出异常
print(re.search("abc","112abc333abc"))  
	# <re.Match object; span=(3, 6), match='abc'>
print(re.search("abc","112abc333abc").group())  # abc

print(re.search("abcd","12abc333abc"))          # None
print(re.search("abcd","12abc333abc").group()) 
	# 报错 "AttributeError" 因为没拿到这个对象,所以没有group()属性

#re.match()
	与 re.search 功能相同, 但必须匹配起始位置, 不然返回 None
print(re.match("abc","abc22abc"))  
	# <re.Match object; span=(0, 3), match='abc'>
print(re.match("abc","abc22abc").group())  # abc
print(re.match("abc","1abc22abc"))  # None

#re.split()
	以规定字符作为分隔符对字符串进行切分, 切分结果放入列表, 没匹配到返回原字符串列表
    将规定字符放入 [ ] 则是逐个匹配
print(re.split("ab","abcoababcoabc"))  #['', 'co', '', 'co', 'c']
print(re.split("a","nbc")) #['nbc'],返回原字符串
print(re.split("[ob]","abcoabcoabc"))  # ['a', 'c', 'a', 'c', 'a', 'c']

#re.sub()和re.subn()
	匹配字符, 并将其该成指定字符, 返回改变后的字符串, 后面可跟个数参数, 不指定默认替换所有
	re.subn( ) 返回一个元组, 第二个元素返回的是替换的个数
print(re.sub("a","AA","i am a man"))  # i AAm AA mAAn
print(re.sub("a","AA","i am a man",100))  # i AAm AA mAAn,不报错
print(re.subn("a","A","i am a man"))  # ('i Am A mAn', 3) (显示替换的个数)

#re.compile()  	返回一个对象
obj=re.compile("\d{2}")
print(obj) # re.compile('\\d{2}')
print(obj.findall("ab123bc123")) #['12', '12']
print(obj.search("ab123bc123").group())	# 12
print(obj.match("123ab123bc123").group())	# 12

substitude 替换

5. 非捕获匹配?: ?! ?=

在这里插入图片描述

# ?:
	(?:)非捕获分组,只会进行单纯的模式匹配并不会将匹配到的值进行保存,与()区分
print(re.findall("jk(loli)+","jkloli")) # ['loli']
print(re.findall("jk(?:loli)+","jkloli")) # ['jkloli']

# ?!	正向否定预查
	1.在没匹配到字符串的前提下,再进行后续的正则,后续匹配仍然从被匹配字符串的头开始
res = re.match("(?![\d]+$)(?![a-zA-Z]+$)[\da-zA-Z]{6}$",passwd)
	#匹配6位数字与字母组合,不能纯数字或字母
    2.匹配位置 后面 不能跟着指定表达式。
print(re.findall("19(?!99)","1999"))
print(re.findall("\d{2}(?!99)","1999 1988"))#['99', '19', '88']
	#先尝试匹配"1999",再'999 '(成功),再"9 19",再" 198",再"1988"(成功),再"88",理解下匹配的窗格移动
    
# ?=  正向肯定预查
	1.在匹配到字符串的前提下,再进行后续的正则,后续匹配仍然从被匹配字符串的头开始
res = re.search("(?=.*[\d])(?=.*[a-z])(?=.*[A-Z])(?=.*)(?=.*[!@#%&])^([\da-zA-Z!@#%&]{7,})$",passwd)
	#至少七位密码,包含大小写,数字,特殊字符(!,@,#,%,&)
    
    2.匹配位置 后面 必须跟着指定表达式。
r"foo(?=bar)"可以匹配foobar中的foo,不能匹配foobaz中的foo
    

# ?<=
	匹配位置 前面 必须跟着指定表达式。
print(re.findall("(?<=jk).*?(?=li)","mcjli jkloli liejk"))   #['lo']

# ?<!
	匹配位置 前面 不能跟着指定表达式。
	print(re.findall("\\B(?<!18)\d{2}\\b","1988  1899")) #['88']
	
6. 边界匹配问题

\b表示单词边界,\B表示非单词边界

一般空格、换行、标点符号或者特殊符号来表示边界

或者说非数字、字母、下滑线、unicode汉字表示边界

中文字符串为边界的话要用re.A编码模式

print(re.findall("\\b19(?:[^9]{2})\\b","1999  1988")) #['1988']

print(re.findall("\\b19(?:[^9]{2})\\b","你也玩1999?1988带我一个",re.A))
	# ['1988']

4. request模块

5. time库

6. urllib

from urllib.parse import unquote

文章来源:https://blog.csdn.net/google20/article/details/135719255
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。