Python基础自学(第六章-Python标准库)

第一部分:与系统相关的sys模块

使用这个模块前先导入该模块(import sys),该模块有以下几个常用的点:

  • 命令行参数(在命令执行程序时,向程序添加参数信息)
    我们先创建这么一个叫脚本,功能是打印程序运行时sys.argv包含的信息:
    在这里插入图片描述
    接着我们执行这个脚本:(第一个就是sys.argv的值,它是一个由命令行参数组成的列表,这里我们的命令行参数只有名字,故此它的值就是这个)
    在这里插入图片描述
    我们试着在执行脚本的过程中加入一些参数:(可以看出这个sys.argv是一个将命令行参数按照空格进行分开得到字符串列表,其中的123并没有解析成数字)
    在这里插入图片描述
    接着我们验证一下是不是符合这个规则:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    如果想输出这个“zhang san ”,我们可以这样写避开它的空格字符检测:
    在这里插入图片描述
    但是如果这个sys.argv[1]不存在就会抛出异常:
    在这里插入图片描述
    如果我们不想让异常抛出,可对脚本进行修改,使其符合条件输出条件,不符合则输出默认值:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 异常消息
    在抛出异常时,我们可以使用sys.exc_info()得到异常的具体信息:
    在这里插入图片描述
    可以看出这个函数返回一个三元组(type、value、traceback),分别代表异常类型、异常值、回溯信息(即程序出错的具体位置)
  • 系统路径
    使用变量sys.path查看Python搜索模块时的路径和查找顺序:
    在这里插入图片描述
    这个查找顺序是由我们导入的模块决定的,它会依次寻找相应的模块文件直到找不到为止,如果上述路径都找不到的话就会抛出异常,在上述图中’ '符号表示的是当前工作目录,是优先级最高的路径。
  • 操作系统信息(使用sys.platform)
    在这里插入图片描述
  • python版本信息(使用sys.version)
    在这里插入图片描述

第二部分:与操作系统进行交互的OS模块

该模块是与操作系统进行交互的标准模块,使用前导入os模块(import os)

  • 文件相关操作
    在这里插入图片描述
    在这里插入图片描述
    用os.listdir(’.’)获取当前工作目录下的所有文件夹以及子文件夹:
    在这里插入图片描述
    在这里插入图片描述
    是故我们可以利用这个函数查看一个文件是否在文件夹中:
    在这里插入图片描述
    在这里插入图片描述
    利用os.rename()函数来重命名一个文件名字:
    在这里插入图片描述
    利用remove()函数来删除一个文件:
    在这里插入图片描述
    下面列举关于这个模块下与文件先关操作的函数:
  • os.getcwd()(获取当前工作目录)
  • os.chdir(path)(改变当前工作目录)
  • os.listdir(path)(列出指定目录下的文件和文件夹列表)
  • os.remove(path)(删除文件)
  • os.unlink(path)(删除文件)
  • os.removedirs(path)(删除文件,并删除中间的路径中的空文件夹)
  • os.rename(old,new)(重命名文件,该文件要存在,否则抛出异常)
  • os.renames(old,new)(重命名文件,如果文件不存在则创建)
  • os.mkdir(name)(产生新文件夹,如果文件夹不存在则抛出异常)
  • os.makedirs(name)(产生新文件夹,如果文件夹不存在则创建)
    以上函数使用前要记得导入os模块
  • 系统相关变量
    环境变量:(通过os.environ获取当前环境变量)
    在这里插入图片描述
    另外介绍一下Python为解决不同路径规范问题带来的麻烦问题,在
    os模块下额外提供的os.path模块:
    使用前导入(import os.path)
    在这里插入图片描述
    它其中包含很多和路径相关的功能,列举如下:
  • os.path.isfile(path)(判断路径是否为文件)
  • os.path.isdir(path)(判断路径是否为文件夹)
  • os.path.exists(path)(检测路径是否存在)
  • os.path.isabs(path)(检测路径是否为绝对路径)
  • os.path.split(path)(按照系统分隔符,将路径拆分为(head,tail)两部分)
  • os.path.join(a,*p)(使用系统分隔符,将各个部分合并为一个路径)
    上面这些函数就是为了解决不同系统之间差异带来的问题

第三部分:string模块

该模块是与字符串相关的标准模块,使用前导入模块(import string)
在这里插入图片描述

  • 常用的字符串集合

  • 英文标点字符串集合
    在这里插入图片描述

  • 英文字母表集合
    在这里插入图片描述

  • 小写字母表集合
    在这里插入图片描述

  • 大写字母表集合
    在这里插入图片描述

  • 数字集合
    在这里插入图片描述

  • 16进制数字集合
    在这里插入图片描述

  • 8进制数字集合
    在这里插入图片描述

  • 空白字符集合(分别是制表符、换行符、垂直制表符、换页符、回车符)
    在这里插入图片描述

  • 字符串函数(大部分已经给字符串本身的方法代替,剩下以下两个)

  • 将单个字母的首字符大写
    在这里插入图片描述

  • 替换函数(string.maketrans(from,to),本质是将ASCII码中的参数from中的字符一次替换为参数to中对应的字符,故此它们两个的长度必须一致)
    在这里插入图片描述

第四部分:正则表达式-re模块

正则表达式是一种强大的字符串匹配模式,通常使用单个字符串来描述,匹配一系列匹配某个语法规则的字符串。
常用的正则表达式如下表

表达式 匹配内容
. 匹配除了换行符之外的字符
[…] 匹配在该集合中的任意字符,支持范围如a~z,0~9等
(…) 作为一个整体进行匹配
\w 匹配任意大小写字母或数字,相当于[a~z,A~Z,0~9]
\d 匹配任意数字,相当于[0~9]
\s 匹配任意空白符,相当于[\t\n\f\v\r]
| 逻辑或,匹配前一个或后一个表达式,如ab|cd可以匹配ab或者cd
^ 逻辑非,表示后面字符的补,如^[ab]表示除了ab之外的任意字符
\W \w的补,匹配所有非字母或数字
* 匹配前面的字符0次到更多次,如a*b可以匹配b、ab、aab、aaab、aaaab
+ 匹配前面的字符1次或更多次,如a*b可以匹配ab、aab、aaab、aaaab
匹配前面的字符0次或1次,如a?b可以匹配b或ab
{m} 匹配前面的字符m次,如a{5}匹配aaaaa
{m,} 匹配前面的字符至少m次,如\d{5}匹配至少5位数字
{m,n} 匹配前面的字符至少m次,之多n次(包括m和n次)
  • re模块的使用
    导入re模块:
    在这里插入图片描述
    使用re.match()函数对字符串的开头进行匹配:
    在这里插入图片描述
    在这里插入图片描述
    使用re.search()函数去匹配字符串中满足条件的第一次字串,返回它:
    在这里插入图片描述
    使用re.split()函数对字符串进行分割:
    在这里插入图片描述
    在这里插入图片描述
    使用re.sub()函数对字符串中正则表达式匹配的部分进行替换:
    在这里插入图片描述
    在这里插入图片描述
  • 方法group()的使用
    当正则表达式给匹配后,python不会直接返回匹配后的字符串,而是返回一个Math对象,此时我们就需要用group来得到
    在这里插入图片描述
    事实上,由于正则表达式中有括号,返回的math对象还可以调用方法group(1):
    在这里插入图片描述
  • 不转义的字符串
    在python中,字符串本身对反斜杠也有转义作用
    在这里插入图片描述
    因为反斜杠同时也是Windows的默认路径的分隔符,所以路径也需要转义:
    在这里插入图片描述
    所以假如使用反斜杠来分割字符串的话就要这样写:
    在这里插入图片描述
    可以看出这样比较麻烦,所以python提供了不转义字符串来解决这个问题(方法很简单,只需要在不转义的字符串前面加一个r就行了):
    在这里插入图片描述

第五部分:与时间相关的datetime模块

这个模块是用来处理时间和日期相关的,使用前导入这个模块:
在这里插入图片描述

  • date对象(使用该对象生成一个年-月-日的信息对象):
    在这里插入图片描述
    另外可以使用date的另一个strftime()方法将日期转化为特定的格式:
    在这里插入图片描述
    还可以使用today()方法得到系统时间:
    在这里插入图片描述
  • timedelta对象
    在这里插入图片描述
    由此我们知道两个日期相减可以得到一个timedelta对象,所以我们可以使用timedelta(day,sec,ms,us,min,hr,wr)来构造一个时间间隔(不指定里面的参数的话,默认都是0)
    在这里插入图片描述
  • time对象
    利用这个可以产生一个time对象
    在这里插入图片描述
    其中time(hour,min,sec,us),例如上面t1表示15点38分,不指定的参数默认是0,输出格式也同样可以用strftime()方法指定:
    在这里插入图片描述
  • datetime对象
    可以用这个对象创建一个带有日期和时间的对象,用法为和参数为:
    datetime(year,month,day,hr,min,sec,us)
    在这里插入图片描述
    同样的,也可以用这个对象获取当前的系统时间:
    在这里插入图片描述
    因为这个对象可以获取具体的时间,故而可以可date对象一样进行减法操作,同时还可以和timedelta对象进行加法操作:
    在这里插入图片描述

第六部分:pprint模块

引入这个模块是为了打印出结构更加整齐和易于阅读,使用前导入该模块:
在这里插入图片描述

第七部分:序列化python对象中的pickle、Cpickle对象

pickle对象可以把python对象转化为一个字符串序列,同时也可以从这个序列中还原一个具有相同特征的python对象,而Cpickle因为是用C语言实现,所以速度要比pickle快:
使用前导入相应模块,优先导入Cpickle,没有再导入pickle:

  • pickle的编码和解码(使用pickle.dumps()对象可以将一个对象转换成字符串)
    在这里插入图片描述
    想在可以利用pickle.loads()方法将它恢复成原来的对象:
    在这里插入图片描述
  • pickle的编码方式(默认采用ASCII码)
    我们可以修改参数来改变编码方式:
    0:ASCII编码格式
    1:旧的二进制编码格式
    2:新的二进制编码格式
    HIGHEST_PROTOCOL:查看当前最高级的编码
    在这里插入图片描述
    在这里插入图片描述
    如果不知道最高级又不想查看,可以通过设置负数为参数:
    在这里插入图片描述
    利用pickle.loads()函数无需考虑编码方式,python自动转换:
    在这里插入图片描述
  • pickle文件的读写(简单的做法是保存到文件中)
    用法如下:
    在这里插入图片描述
    在这里插入图片描述
    使用pickle.load()从文件对象恢复这个对象:
    在这里插入图片描述
    需要注意的是这个pickle不太适合用于大的python对象,对于比较大的对象,pickle的读写速度较慢。

第八部分:读写JSON数据的json模块

json(javaScript Object Notation)是一种轻量级的数据交换格式,它既易于人们进行阅读和编写,也易于机器解析和生成

  • json的格式

1:object-json对象,用花括号表示,形式为(其中数据是无序的):
{pair_1,…pair_n}

2:pair-json键值对,形式为:
string:value

3:array-json数组,用中括号表示,形式为(其中数据是有序的):
[value_1,…value_n]

4:value-josn值,可以是(object对象、string字符串、array数组、number数字、true/false/null特殊值)

5具体例子如下:
在这里插入图片描述
反过来,使用json.dumps()函数也可以将一个python对象转化为json字符串:
在这里插入图片描述
值得注意的是,python中的字典会转化为一个json对象,列表则是json数组,元组也是转化为数组,具体例子如下:
在这里插入图片描述

  • json文件的读写
    调用json.dump(obj,f)函数可以将对象以json格式保存到文件对象f中:
    在这里插入图片描述
    在这里插入图片描述

第九部分:文件模式匹配(glob模块)

使用前导入相应模块,这个模块提供了方便的文件匹配方法:
在这里插入图片描述
当前的工作目录如下:
在这里插入图片描述
利用glob.glob()函数可以进行文件匹配,例如匹配这里json结尾的:
在这里插入图片描述
如果在下一级目录的话就应该这样匹配:
在这里插入图片描述
在这里插入图片描述
还是用第一种方法匹配:
在这里插入图片描述
发现没有改变,修改后匹配:
在这里插入图片描述
这样就匹配到我们新建的一个json文件了,这第一个*是匹配文件夹的,第二个是匹配文件的。其中:
*:匹配单个字符或多个,除了路径分隔符
?:匹配任意单个字符
[seq]:匹配指定范围内的单个字符,如:[0-9]匹配单个数字
[!seq]:这个就是非指定范围

第十部分:高级文件操作(shutil模块)

前面提到的os模块只能进行简单的文件删除和重命名等操作,对于更高级的文件操作还是要用到这个模块,使用前先导入这个模块:

  • 文件的复制
    在这里插入图片描述
    如果目标地址的文件夹不存在则会抛出异常:
    在这里插入图片描述
  • 文件夹的复制
    在这里插入图片描述
    在这里插入图片描述
    与os.rename不同的是这个os.renames遇到文件夹不存在的时候会自动创建。可以看出两个文件已经移动到这个新建的文件夹下面了,现在我们执行以下文件夹复制操作(文件夹不存在时自动创建):
    在这里插入图片描述
  • 非空文件夹的删除
    利用os.removedirs()函数可以删除空文件夹
    在这里插入图片描述
    如果删除非空文件夹可以使用这个函数:shutil.rmtree():
    在这里插入图片描述
  • 文件夹的移动
    利用这个函数shutil.move()可以整体移动一个文件夹,它与os.renames()的作用是一样的,移动一个文件夹就是相当于对这个文件夹重命名
    在这里插入图片描述

第十一部分:更多的容器类型(collection模块)

在前面我们已经知道了一般类型的容器类,例如字典、列表、集合等,这里引入这个模块可以提供更多的容器类,使用前导入该模块:

  • 计数器
    计数器有多种构造形式,如下所示:
    在这里插入图片描述
    例如我们可以实现一个统计一段文本中各个单词出现的次数:
    在这里插入图片描述
    计数器和字典非常类似,因此也支持很多像是字典的操作:
    例如插入操作
    在这里插入图片描述
    还有删除操作:
    在这里插入图片描述
    和字典不同的操作如下:
    1:
    在这里插入图片描述
    2:
    在这里插入图片描述
    3:(下面示例为减法、同时还有加法、取并、取交,但是除了减法以外的非正结果将会给忽略)
    在这里插入图片描述
    在这里插入图片描述
    同时,对于一个计数器,常用的方法如下所示:
    在这里插入图片描述
  • 双端队列
    双端队列支持将元素从对尾和头插入:
    在这里插入图片描述
    在这里插入图片描述
  • 有序字典
    有序字典是指键按照顺序排列的字典,下面我们分别构建一个有序字典和普通字典:
    普通字典:
    在这里插入图片描述
    有序字典:
    在这里插入图片描述
    我们现在对两个不同的字典遍历:
    在这里插入图片描述
  • 带默认值的字典
    我们知道,对于普通的字典,当索引不存在的键时会抛出异常,这里我们使用带默认值的字典可以通过设置默认值来解决这个问题:
    例如一个列表就返回一个空值:
    在这里插入图片描述
    int和float就返回0和0.0:
    在这里插入图片描述
    还可以使用Lambda表达式构造自定义函数:
    这个是lambda表达式的百度百科
    在这里插入图片描述

第十二部份:math模块

导入该模块可以提供数学计算:
在这里插入图片描述
下面介绍几种常用的数学函数:
1:计算平方根
在这里插入图片描述
2:圆周率
在这里插入图片描述
3:三角函数
在这里插入图片描述
4:反三角函数
在这里插入图片描述
5:对数和指数
在这里插入图片描述
在这里插入图片描述
6:角度和度数之间的转化
在这里插入图片描述

第十三部份:random模块

这个模块是与随机数相关的,使用前导入该模块:
在这里插入图片描述
1:使用random.randint()可以产生一个随机整数(包括起始和结束位置的数字)
在这里插入图片描述
2:使用random.randrange([start,]stop[,step])也可以产生一个随机数,但是不包括stop,省略start和step时start默认是0,其中step不指定时默认是1:
在这里插入图片描述
3:使用random.random()可以产生一个0-1之间的随机数:
在这里插入图片描述
4:使用random.choice()可以从一个序列中随机一个元素:
在这里插入图片描述
5:使用random.shuffle()可以将序列中的元素顺序打乱达到随机效果:
在这里插入图片描述
6:使用random.sample()可以不放回的随机采样元素,例如从0-9之间随机采样三个元素:
在这里插入图片描述

这章就写到这里了,python的标准库我感觉很大,这些估计只是表皮,还有最近忙着软考这个学习进度都放慢了很多,还有差不多又要实习了,然后java的学习还得跟进啊(手动悲伤~~)

猜你喜欢

转载自blog.csdn.net/weixin_42341232/article/details/90341353