python 常见模块
- 一、sys模块
- 二、os模块
- 三、random模块
- 四、time模块
- 五、JSON支持
- 六、正则表达式(re模块)
-
-
- 1. 正则表达式的作用
- 2. 正则表达式支持
-
- (1)re.compile(pattern, flags=0)
- (2)re.match(pattern, string, flags=0)
- (3)re.search(pattern, string, flags=0)
- (4)re.findall(pattern, string, flags=())
- (5)re.finditer(pattern, string, flags=())
- (6)re.fullmatch(pattern, string, flagsM))
- (7)re.sub(pattern, repl, string, count=0, flags=0)
- (8)re.split(pattern, string, maxsplit=(), flags=0)
- (9)re.purge()
- (10)re-escape(pattern)
- 3. 正则表达式旗标
- 4. 创建正则表达式
- 5. 子表达式(P244-246)
- 6. 贪婪模式与勉强模式
-
- 七、容器相关类
- 八、collections下的容器支持
- 九、函数相关模块
一、sys模块
1. sys模块的作用
sys模块代表了python解释器,主要用于获取和python解释器相关的信息。
[e for r in dir(sys) if not e.startswith(’_’)]
2. sys模块的参考页面:
https://docs.python.org/3/library/sys.html
3. sys模块中常用的属性和函数:
- sys.argy:获取运行Python程序的命令行参数。argv属性值是一个列表
其中sys.argv[0]通常就是指该Python程序,
sys.argv[l]代表为Python程序提供的第一个参数,
sys.argv[2]代表为Python程序提供的第二个参数……依此类推。 - sys.byteorder:显示本地字节序的指示符。如果本地字节序是大端模式,则该属性返回big;否则返回little。
- sys.copyright:该属性返回与Python解释器有关的版权信息。
- sys.executable:该属性返回Python解释器在磁盘上的存储路径。
- sys.exit():通过引发SystemExit异常来退出程序。将其放在try块中不能阻止finally块的执行。
- sys.flags:该只读属性返回运行Python命令时指定的旗标。
- sys.getfilesystemencoding():返回在当前系统中保存文件所用的字符集。
- sys.getrefcount(object):返回指定对象的引用计数。前面介绍过,当object对象的引用计数为0时,系统会回收该对象。
- sys.getrecursionlimit() :返回Python解释器当前支持的递归深度。该属性可通过
setrecursionlimit()方法重新设置。
sys.getswitchinterval():返回在当前Python解释器中线程切换的时间间隔。该属性可通过setswitchinterval()函数改变。 - sys.implementation:返回当前Python解释器的实现。
- sys.maxsize:返回Python整数支持的最大值。在32位平台上,该属性值为2** 31-1;在64位平台上,该属性值为2**63-1。
- sys.modules:返回模块名和载入模块对应关系的字典。
- sys.path:该属性指定Python査找模块的路径列表。程序可通过修改该属性来动态增加Python加载模块的路径。
- sys.platform:返回Python解释器所在平台的标识符。
- sys.stdin:返回系统的标准输入流—— 一个类文件对象。
- sys.stdout:返回系统的标准输出流—— 一个类文件对象。
- sys.stderr:返回系统的错误输出流—— 一个类文件对象。
- sys.version:返回当前Python解释器的版本信息。
- sys.winver:返回当前Python解释器的主版本号。
二、os模块
1. os模块的作用
os模块代表了程序所在的操作系统,主要用于获取程序运行所在操作系统的相关信息。
os.__all__命令
2. os模块的参考页面:
https://docs.python.org/3/library/os.html
3. os模块中常用的属性和函数:
- os.name:返回导入依赖模块的操作系统名称,通常可返回,‘posix’、‘nt’、‘java’等值其中之一。
- os.environ:返回在当前系统上所有环境变量组成的字典。
- os.fsencode(filename):该函数对类路径(path-like)的文件名进行编码。
- os.fedecode(filename):该函数对类路径(path-like)的文件名进行解码。
- os.PathLike:这是一个类,代表一个类路径(path-like)对象。
- os.getenv(key, default=None):获取指定环境变量的值。
- os.getlogin():返回当前系统的登录用户名。与该函数对应的还有os.getuid()、os.getgroups()、os.getgid()等函数,用于获取用户ID、用户组、组ID等,这些函数通常只在UNIX系统上有效。
- os.getpid():获取当前进程ID。
- os.getppid():获取当前进程的父进程ID。
- os.putenv(key, value):该函数用于设置环境变量。
- os.cpu_count():返回当前系统的CPU数量。
- os.sep:返回路径分隔符。
- os.pathsep:返回当前系统上多条路径之间的分隔符。一般在Windows系统上多条路径之间的分隔符是英文分号(;);在UNIX及类UNIX系统(如Linux、Mac OS X)上多条路径之间的分隔符是英文冒号(:)。
- os.linesep:返回当前系统的换行符。一般在Windows系统上换行符是“\r\n";在UNIX系统上换行符是“\n” ;在Mac OS X系统上换行符是“\r”。
- os.urandom(size):返回适合作为加密使用的、最多由N个字节组成的bytes对象。该函数通过操作系统特定的随机性来源返回随机字节,该随机字节通常是不可预测的,因此适用于绝大部分加密场景。
在os模块下还包含大量操作文件和目录的功能函数。
在os模块下与进程管理相关的函数如下。
- os.abort():生成一个SIGABRT信号给当前进程。在UNIX系统上,默认行为是生成内核转储;在Windows系统上,进程立即返回退出代码3。
- os.execl(path, arg0, argl, …):该函数还有一系列功能类似的函数,比如 os.execle()、os. execlp()等,这些函数都是使用参数列表argO,argl,…来执行path所代表的执行文件的。
- os.fbrkpty(): fbrk—个子进程。
- os.kill(pid, sig):将sig信号发送到pid对应的过程,用于结束该进程。
- os.killpg(pgid, sig):将sig信号发送到pgid对应的进程组。
- os.popen(cmd, mode=‘r’, buffering=-1):用于向cmd命令打开读写管道(当mode为r时为只读管道,当mode为rw时为读写管道),buffering缓冲参数与内置的open。函数有相同的含义。该函数返回的文件对象用于读写字符串,而不是字节。
- os.spawnl(mode, path, …):该函数还有一系列功能类似的函数,比如 os.spawnle()、os.spawnlp()等,这些函数都用于在新进程中执行新程序。
- os.startfile(path[, operation]):对指定文件使用该文件关联的工具执行operation对应的操作。如果不指定operation操作,则默认执行打开(open)操作。operation参数必须是有效的命令行操作项目,比如open (打开)、edit (编辑)、print (打印)等。
- os.system(command):运行操作系统上的指定命令。
三、random模块
1. random模块的作用
random模块主要包含生成伪随机数的各种功能变量和函数。
random.__all__命令
2. random模块的参考页面:
https://docs.python.org/3/library/random.html
3. random模块中常用的属性和函数:
- random.seed(a=None, version=2):指定种子来初始化伪随机数生成器。
- random.randrange(start, stop[, step]):返回从 start 开始到 stop 结束、步长为 step 的随机数。其实就相当于choice(range(start, stop, step))的效果,只不过实际底层并不生成区间对象。
- random.randint(a, b):生成一个范围为a≤N≤b的随机数。其等同于randrange(a, b+1)的效果。
- random.choice(seq):从seq中随机抽取一个元素,如果seq为空,则引发IndexError异常。
- random.choices(seq, weights=None, *, cum_weights=None, k=1):从 seq 序列中抽取 k 个元素,还可通过weights指定各元素被抽取的权量(代表被抽取的可能性高低)。
- random.shuffle(x[, random]):对x序列执行洗牌“随机排列”操作。
- random.sample(population, k):从population序列中随机抽取k个独立的元素。
- random.random():生成一个从0.0 (包含)到1.0 (不包含)之间的伪随机浮点数。
- random.unifbrm(a, b):生成一个范围为a≤N≤b的随机数。
- random.expovariate(lambd):生成呈指数分布的随机数。其中lambd参数(其实应该是lambda,只是lambda是Python关键字,所以简写成lambd)为1除以期望平均值。如果lambd是正值,则返回的随机数是从0到正无穷大;如果lambd为负值,则返回的随机数是从负无
穷大到0。
四、time模块
1. time模块的作用
time模块主要包含各种提供日期、时间功能的类和函数。该模块既提供了把日期、时间格式化为字符串的功能,也提供了从字符串恢复日期、时间的功能。
[e for r in dir(time) if not e.startswith(’_’)]
2. time模块的参考页面:
https://docs.python.org/3/library/time.html
3. time模块中常用的属性和函数:
time.struct_time类中各属性的含义:
字段名 | 字段含义 | 值 |
---|---|---|
tm_year | 年 | 如2017、2018等 |
tm_mom | 月 | 如2、3等,范围为1~12 |
tm_mday | 日 | 如2、3等,范围为1~12 |
tm_hour | 时 | 如2、3等,范围为1~12 |
tm_min | 分 | 如2、3等,范围为1~12 |
tm_sec | 秒 | 如2、3等,范围为1~12 |
tm_wday | 周 | 周一为0,范围为0~6 |
tm_yday | 一年内第几天 | 如65,范围为1~366 |
tm_isdst | 夏令时 | 0、1或-1 |
比如,Python 可以用 time.struct_time(tm_year=2018, tm_mon=5, tm_mday=2, tm_hour=8,tm_min=0, tm_sec=30, tm_wday=3, tm_yday=1, tm_isdst=0)很清晰地代表时间。
此外,Python还可以用一个包含9个元素的元组来代表时间,该元组的9个元素和struct_time对象中9个属性的含义是一一对应的。比如程序可以使用(2018,5,2, 8,0,30,3, 1,0)来代表时商。
在日期、时间模块内常用的功能函数如下。
- time.asctime([t]):将时间元组或struct_time转换为时间字符串。如果不指定参数t,则默认
转换当前时间。 - time.ctime([secs]):将以秒数代表的时间转换为时间字符串。
- time.gmtime([secs]):将以秒数代表的时间转换为struct_time对象。如果不传入参数,则使
用当前时间。 - time.localtime([secs]):将以秒数代表的时间转换为代表当前时间的struct_time对象。如果
不传入参数,则使用当前时间。 - time.mktime(t):它是localtime的反转函数,用于将struct_time对象或元组代表的时间转换
为从1970年1月1日0点整到现在过了多少秒。 - time.perf_counter():返回性能计数器的值。以秒为单位。
- time.process_time():返回当前进程使用CPU的时间。以秒为单位。
- time.sleep(secs):暂停secs秒,什么都不干。
- time.strftime(format[, t]):将时间元组或struct_time对象格式化为指定格式的时间字符串。如果不指定参数t,则默认转换当前时间。
- time.strptime(string[, format]):将字符串格式的时间解析成struct_time对象。
- time.time():返回从1970年1月1日0点整到现在过了多少秒。
- time.timezone:返回本地时区的时间偏移,以秒为单位。
- time.tzname:返回本地时区的名字。
代码如下:
# 生命时间,假如活到90岁
import time
starttimes = (1990, 6, 23, 0, 0, 0, 0, 0, 0)
endtimes = (2080, 6, 23, 0, 0, 0, 0, 0, 0)
# 出生日期,"1990年6月23日"
starttime = time.mktime(starttimes)
# 当面时间
nowtime = time.strftime('%Y年%m年%d日 %H时%M分%S秒',time.localtime(time.time()))
# 已度时光(荒废),秒数
overtime = time.time() - starttime
# 时间尽头(90岁),"2080年6月23日"
endtime = time.mktime(endtimes)
# 剩余时间(奋斗),年、月、日、时、分、秒
# 秒
futuretimes = endtime - time.time()
# 分
futuretimeM = futuretimes//60
# 时
futuretimeh = futuretimeM//60
# 天
futuretimed = futuretimeh//24
# 周
futuretimew = futuretimed//7
# 月
futuretimem = futuretimew//4.34
# 年
futuretimey = futuretimem//12
print(nowtime)
print(overtime)
print(('%s秒') % int(futuretimes))
print(('%s分') % int(futuretimeM))
print(('%s时') % int(futuretimeh))
print(('%s天') % int(futuretimed))
print(('%s周') % int(futuretimew))
print(('%s月') % int(futuretimem))
print(('%s年') % int(futuretimey))
# 遗留问题,加单位,参考P86练习
python时间格式字符串所支持的指令
指令 | 含义 |
---|---|
%a | 本地化的星期几的缩写名,比如Sun代表星期天 |
%A | 本地化的星期几的完整名 |
%b | 本地化的月份的缩写名,比如Jan代表 一月 |
%B | 本地化的月份的完整名 |
%c | 本地化的日期和时间的表示形式 |
%d | 代表一个月中第几天的数值,范围:01~31 |
%H | 代表24小时制的小时,范围:00~23 |
%I | 代表12小时制的小时,范围:01~12 |
%j | 一年中第几天,范围:001~366 |
%m | 代表月份的数值,范围:01~12 |
%M | 代表分钟的数值,范围:00~59 |
%p | 上午或下午的本地化方式。当使用strptimeO函数并使用%1指令解析小时时,%p只影响小时字段 |
%S | 代表分钟的数值,范围:00-61,该范围确实是00~61, 60在表示闰秒的时间戮时有效,而61则是由于一些 |
历史原因造成的 | |
%U | 代表一年中第几周,以星期天为每周的第一天,范围:00~53。在这种方式下,一年中第一个星期天被认为处 |
于第一周。当使用stiptime()函数解析时间字符串时,只有同时指定了星期几和年份该指令才会有效 | |
%w | 代表星期几的数值,范围:0~6,其中0代表 |
%W | 代表一年中第儿周,以星期一为每周的第一天,范围:00-53。在这种方式下,一年中第一个星期-被认为处 |
于第一周。当使用strptime()函数解析时间字符串时,只有同时指定了星期几和年份该指令才会有效 | |
%x | 本地化的日期的表示形式 |
%X | 本地化的日期的表现形式 |
%y | 年份的缩写,范围:00~99,比如2018年就简写就好了 |
%Y | 年份的完整形式,如2018 |
%z | 显示时区偏移 |
%Z | 时区名(如果时区不存在,则显示的空) |
%% | 用于代表%符号 |
五、JSON支持
1. JSON模块的作用
JSON是一种轻量级、跨平台、跨语言的数据交换格式,JSON格式被广泛应用于各种语言的
数据交换中。
json.__all __
2. JSON的基本知识
JSON 的全称是 JavaScript Object Notation。
JSON主要有如下两种数据结构。
- 由key-value对组成的数据结构。这种数据结构在不同的语言中有不同的实现。例如,在
JavaScript中是一个对象;在Python中是一•种diet对象;在C语言中是一个struct;在其他
语言中,则可能是 record、dictionary、hash table 等。 - 有序集合。这种数据结构在Python中对应于列表;在其他语言中,可能对应于list、vector.
数组和序列等。
(1)使用JSON语法创建对象
语法格式:
var a = { key1 : value1, key2: value2,…}
(2)使用JSON语法创建数组
语法格式:
var a = [value1, value2,…]
3. python的JSON支持
(1)JSON类型转换为python类型的对应关系
JSON类型 | python类型 |
---|---|
对象(object) | 字典(dict) |
数组(array) | 列表(list) |
字符串(string) | 字符串(str) |
整数(number(int)) | 整数(int) |
实数(number(real)) | 浮点数(float) |
true | True |
false | False |
null | None |
(2)python类型转换为JSON类型的对应关系
python类型 | JSON类型 |
---|---|
字典(dict) | 对象(object) |
列表(list)和元组(tuple) | 数组(array) |
字符串(str) | 字符串(string) |
整数、浮点数、以及整型、浮点型派生的枚举(float,int-&float-derived Enums) | 整数(number) |
实数(number(real)) | 浮点数(float) |
True | true |
False | false |
None | null |
4. JSON模块中常用的属性和函数:
- json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan= True,
cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw):将 obj 对象
转换成JSON字符串输出到fp流中,币是一个支持write()方法的类文件对象。 - json.dumps(obj, * , skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan= True,
cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw):将 obj 对象
转换为JSON字符串,并返回该JSON字符串。 - json.Ioad(fp,* , cls=None, object_hook=None, parse_float=None, parse_int=None, parse_
constant=None, object_pairs_hook=None, **kw):从fp流读取 JSON 字符串,将其恢复成 JSON对象,其中fp是一个支持write()方法的类文件对象。 - json.loads(s, * , encoding=None, cls=None, object_hobk=None, parse_float=None, parse_
int=None, parse_constant=None, object_pairs_hook=None, **kw):将 JSON 字符串 s 恢复成
JSON对象。
5. JSON主要应用场景
decode(用load或loads)
JSON字符串→python对象
encode(用dump或dumps)
python对象→JSON字符串
dumps()和dump()函数的encode操作(将Python对象转换成JSON字符串)
代码如下:
import json
# 将Python对象转JSON字符串(元组会当成数组)
s = json.dumps(['yeeku', {
'favorite': ('coding', None, 'game', 25)}])
print(s) # ["yeeku", {"favorite": ["coding", null, "game", 25]}]
# 简单的Python字符串转JSON
s2 = json.dumps("\"foo\bar")
print(s2) #"\"foo\bar"
# 简单的Python字符串转JSON
s3 = json.dumps('\\')
print(s3) #"\\"
# Python的dict对象转JSON,并对key排序
s4 = json.dumps({
"c": 0, "b": 0, "a": 0}, sort_keys=True)
print(s4) #{"a": 0, "b": 0, "c": 0}
# 将Python列表转JSON,
# 并指定JSON分隔符:逗号和冒号之后没有空格(默认有空格)
s5 = json.dumps([1, 2, 3, {
'x': 5, 'y': 7}], separators=(',', ':'))
# 输出的JSON字符串中逗号和冒号之后没有空格
print(s5) # '[1,2,3,{"4":5,"6":7}]'
# 指定indent为4,意味着转换的JSON字符串有缩进
s6 = json.dumps({
'Python': 5, 'Kotlin': 7}, sort_keys=True, indent=4)
print(s6)
# 使用JSONEncoder的encode方法将Python转JSON
s7 = json.JSONEncoder().encode({
"names": ("孙悟空", "齐天大圣")})
print(s7) # {"names": ["\u5b59\u609f\u7a7a", "\u9f50\u5929\u5927\u5723"]}
f = open('a.json', 'w')
# 使用dump()函数将转换得到JSON字符串输出到文件
json.dump(['Kotlin', {
'Python': 'excellent'}], f)
sort_keys:排序,(sort_keys=True)
indent:缩进,(indent=4)
separators:没有空格(separators=(’,’, ‘:’))
loads()和load()函数的decode操作(将JSON字符串转换成Python对象)。
代码如下:
import json
# 将JSON字符串恢复成Python列表
result1 = json.loads('["yeeku", {"favorite": ["coding", null, "game", 25]}]')
print(result1) # ['yeeku', {'favorite': ['coding', None, 'game', 25]}]
# 将JSON字符串恢复成Python字符串
result2 = json.loads('"\\"foo\\"bar"')
print(result2) # "foo"bar
# 定义一个自定义的转化函数
def as_complex(dct):
if '__complex__' in dct:
return complex(dct['real'], dct['imag'])
return dct
# 使用自定义的恢复函数
# 自定义回复函数将real数据转成复数的实部,将imag转成复数的虚部
result3 = json.loads('{"__complex__": true, "real": 1, "imag": 2}',\
object_hook=as_complex)
print(result3) # (1+2j)
f = open('a.json')
# 从文件流恢复JSON列表
result4 = json.load(f)
print(result4) # ['Kotlin', {'Python': 'excellent'}]
六、正则表达式(re模块)
1. 正则表达式的作用
正则表达式(Regular Expression)用于描述一种字符串匹配的模式(Pattern),它可用于检査一个字符串是否含有某个子串,也可用于从字符串中提取匹配的子串,或者对字符串中匹配的子串执行替换操作。
2. 正则表达式支持
re.__all __
(1)re.compile(pattern, flags=0)
该函数用于将正则表达式字符串编译成_sre.SRE_Pattem对象,该对象代表了正则表达式编译之后在内存中的对象,它可以缓存并/用正则尾达式字符串。如果程序需要多次使用同一个正则表达式字符串,则可考虑先编译它。
该函数的partem参数就是它所编译的正则表达式字符串,flags则代表了正则表达式的匹配旗
标。
(2)re.match(pattern, string, flags=0)
尝试从字符串的开始位置来匹配正则表达式,如果从开始
位置匹配不成功,match。函数就返回None。其中pattern参数代表正则表达式;string代表
被匹配的字符串;flags则代表正则表达式的匹配旗标。该函数返回_sre.SRE_Match