Python基础(下)
这次总结了Python基础的最后半部分,有些内容总结的不是很到位,后续发现问题也会再改正。
16. 字符串
16.1 字符串的驻留机制
- 字符串
- 在Python中字符串是基本数据类型,是一个不可变的字符序列
- 什么叫字符串驻留机制呢?
- 仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时候,不会开辟新空间,而是把该字符串的地址赋给新创建的变量
1 | |
由此可见,无论是
a还是b还是c,他们指向的空间都是同一块地址
- 驻留机制的几种情况(交互模式)
- 字符串的长度为0或者1时
- 符合标识符的字符串
- 字符串直在编译时进行驻留,而非运行时
- [-5, 256]之间的整数数字
1 | |
sys中的intern()方法强制两个字符串指向同一个对象PyCharm对字符串进行了优化处理
字符串驻留机制的优缺点
- 当需要值相同的字符串时,可以直接从字符串池里拿出来使用,避免频繁的创建和销毁,提升效率和节约内存,因此拼接字符串和修改字符串是会比较影响性能的
- 在需要进行支付穿拼接的时候建议使用
str类型的join方法,而非+,因为join()方法是闲计算出所有字符串中的长度,然后再拷贝,只new一次对象,效率比“+”效率高
16.2 字符串的常用操作
1. 字符串的查询操作的方法
| 方法名称 | 作用 |
|---|---|
index() |
查找子串substr第一次出现的位置,如果查找的子串不存在时,则抛出ValueError |
rindex() |
查找子串substr最后一次出现的位置,如果查找的子串不存在时,则抛出ValueError |
find() |
查找子串substr第一次出现的位置,如果查找的子串不存在时,则返回-1 |
rfind() |
查找子串substr最后一次出现的位置,如果查找的子串不存在时,则返回-1 |
1 | |
由上述代码空可见,
index和find都能查找子串出现的位置,但是index会抛出异常,所以一般建议使用find方法
2. 字符串的大小写转换操作的方法
| 方法名称 | 作用 |
|---|---|
upper() |
把字符串中所有字符都转换成大写字母 |
lower() |
把字符串中所有字符都转换成小写字母 |
swapcse() |
把字符串中所有大写字母转换成小写字母,把所有小写字母转换成大写字母 |
capitalize() |
把第一个字符转换成大写,把其余字符转换成小写 |
title() |
把每一个单词的第一个字符转换成大写,把每个单词剩余字符转换成小写 |
1 | |
3. 字符串内容对齐操作的方法
| 方法名称 | 作用 |
|---|---|
center() |
居中对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数的可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符串 |
ljust() |
左对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数的可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符串 |
rjust() |
右对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数的可选的,默认是空格,如果设置宽度小于实际宽度则返回原字符串 |
zfill() |
右对齐,左边用0填充,该方法只接收一个参数,用于指定字符串的宽度,如果指定的宽度小于等于字符串的长度,返回字符串本身 |
1 | |
4. 字符串劈分操作的方法
| 方法名称 | 作用 |
|---|---|
split() |
1. 从字符串的左边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表 2. 以通过参数sep指定劈分字符串是的劈分符 3. 通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大次劈分之后,剩余的子串会单独作为一部分 |
rsplit() |
1. 从字符串的右边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表 2. 以通过参数sep指定劈分字符串是的劈分符 3. 通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大次劈分之后,剩余的子串会单独作为一部分 |
1 | |
如果字符串劈分没有设定
maxsplit,其实split和rsplit的效果是一样的
5. 判断字符串操作的方法
| 方法名称 | 作用 |
|---|---|
isidentifier() |
判断指定的字符串是不是合法的标识符(字母、数字、下划线) |
isspace() |
判断指定的字符串是否全部由空白字符组成(回车、换行,水平制表符) |
isalpha() |
判断指定的字符串是否全部由字母组成 |
isdecimal() |
判断指定的字符串是否全部由十进制的数字组成 |
isnumeric() |
判断指定的字符串是否全部由数字组成 |
isalnum() |
判断指定的字符串是否全部由字母和数字组成 |
1 | |
在上面的代码例子中,有几个比较特殊的地方,一个是罗马数字和汉语数字一二三并不是十进制数字,但是在判断是否由数字组成的时候,他们的返回值是
True,就说明,他们虽然不是十进制数字,但是也是数字,系统判断为True
6. 字符串操作的其它方法
| 功能 | 方法名称 | 作用 |
|---|---|---|
| 字符串替换 | replace() |
第1个参数指定被替换的子串,第2个参数指定替换子串的字符串,该方法返回替换得到的字符串,替换前的字符串不会发生改变,调用该方法时可以通过第3个参数指定最大替换次数 |
| 字符串合并 | join() |
将列表或者元组中的字符串合并为一个字符串 |
1 | |
16.3 字符串的比较
字符串的比较操作
- 运算符:>、>=、<、<=、==、!=
- 比较规则:首先比较两个字符串的第一个字符,如果相等则继续比较下一个字符,依次比较下去,直到两个字符串中的字符不相等时,其比较结果就是两个字符串的比较结果,两个字符串中的所有后续字符将不再被比较
- 比较原理:两个字符进行比较时,比较的是其
ordinal value(原始值),调用内置函数ord可以得到指定字符的ordinal value。与内置函数ord对应的是内置函数chr,调用内置函数chr时指定ordinal value可以得到其对应的字符
1 | |
16.4 字符串的切片操作
字符串是不可变类型
- 不具备增、删、改等操作
- 切片操作将产生新的对象
1 | |
16.5 格式化字符串
1 | |
上面代码是常见的三种格式化字符串的表示方式,第一中是利用
%占位符,其中%s代表字符串,%i和%d代表整数,%f代表浮点数。第三中方法的使用,需要在输出语句的前面加上一个f,来格式化字符串
1 | |
上面代码是来格式化数字的一些宽度和精度的,一共展示了两种比较常见的方法
16.6 字符串的编码与转码
为什么需要字符串的编码转换
A计算机(str在内存种以Unicode表示)——编码——> ——byte字节传输——> ——解码——> B计算机(显示)
编码与解码的方式
- 编码:将字符串转换成二进制数据(
bytes) - 解码:将
bytes类型的数据转换成字符串类型
1 | |
上面的代码,就是字符串的编码和解码的操作,
encode为编码,decode为解码,需要注意的是编码和解码的格式必须一一对应
17. 函数
17.1 函数的创建和调用
什么是函数
- 函数就是执行特定任何以完成特定功能的一段代码
为什么需要函数
- 复用代码
- 隐藏实现细节
- 提高可维护性
- 提高可读性便于调试
函数的创建
1 | |
- 函数的创建
1 | |
- 函数的调用
1 | |
- 跳到定义函数的函数体内
- 执行函数体
- 跳到函数的调用处
- 继续执行下一条语句
17.2 函数的参数传递
- 位置实参
- 根据形参对应的位置进行实参传递
- 关键字实参
- 根据形参名称进行实参传递
1 | |
函数调用的参数传递内存分析
1 | |
17.3 函数的返回值
- 函数返回多个值时,结果为元组
1 | |
函数在定义时,是否需要返回值,视情况而定,如果需要返回值,就写上返回值,需要注意的就是,返回多个值的时候,返回的类型为元组
17.4 函数的参数定义
- 函数定义时,给形参设置默认值,只有与默认值不符的时候才需要传递实参
1 | |
上面代码,说明了如果对形参设定了默认值,而传递参数的时候,只有和默认值不符合的时候才会传递这个实参,例如传递
100的时候,不影响b的默认值,则不对b进行传参,仍为10。
- 个位可变的位置参数
- 定义函数时,可能无法事先确定传递的位置实参的个数时,使用可变的位置参数
- 使用
*定义个人可变的位置形参 - 结果为一个元组
1 | |
- 个数可变的关键字形参
- 定义函数时,无法事先确定传递的关键字实参的个数时,使用可变的关键字形参
- 使用
**定义个数可变的关键字形参 - 结果为一个字典
1 | |
1 | |
上面代码是函数定义的参数定义的一个特殊情况,如果又有关键字形参也有位置形参,那就要求个数可变的位置形参,放在个数可变的关键字形参的前面
| 序号 | 参数的类型 | 函数的定义 | 函数的调用 | 备注 |
|---|---|---|---|---|
| 1.1 | 位置实参 | √ | ||
| 1.2 | 将序列中的每个元素都转换成位置实参 | √ | 使用* |
|
| 2.1 | 关键字实参 | √ | ||
| 2.2 | 将序列中的每个键值对都转换为关键字实参 | √ | 使用** |
|
| 3 | 默认值形参 | √ | ||
| 4 | 关键字形参 | √ | 使用* |
|
| 5 | 个数可变的位置形参 | √ | 使用* |
|
| 6 | 个数可变的关键字形参 | √ | 使用** |
函数调用的时候的参数传递
1 | |
函数调用的时候,函数的定义形参问题
1 | |
17.5 变量的作用域
- 程序代码能访问该变量的区域
- 根据变量的有效范围可以分为
- 局部变量
- 在函数内定义并使用的变量,只在函数内部有效,局部变量使用global声明,这个变量就成为全局变量
- 全局变量
- 函数体外声明的变量,可作用于函数内外
- 局部变量
1 | |
17.6 递归函数
什么是递归函数
- 如果在一个函数的函数体内调用了该函数本身,这个函数就称为递归函数
递归的组成部分
- 递归调用与递归终止条件
递归的调用过程
- 每递归调用一次函数,都会在栈内存分配一个栈帧
- 每执行完一次函数,都会释放相应的空间
递归的优缺点
- 缺点:占用内存多,效率底下
- 优点:思路和代码简单
使用递归来计算阶乘
1 | |
使用递归来计算斐波那契数列
1 | |
18. Bug
18.1 Bug的由来及分类
马克2号当年计算机出现问题,始终没有修理好,最终打开计算机,发现里面有一只飞蛾,便有了Bug
- 世界上第一部万用计算机的进化版-马克2号(Mark Ⅱ)
bug的常见类型
- 粗心导致的语法错误
SyntaxError - 知识点不熟练导致的错误
- (1) 索引越界问题IndexError
lst = [11,22,33,44]print(lst[4])应该输出lst[3]- (2) append()方法的使用掌握不熟练
lst = []lst = append('a','b','c','d')append是列表的方法,在调用的时候应该是lst.append('A')print(lst)并且append方法一次只能添加一个元素
18.2 不同异常类型的处理方式
粗心导致错误的自查宝典
- 漏了末尾的冒号,如if语句、循环语句、else子句等
- 缩进错误,该缩进的没缩进,不该缩进的瞎缩进
- 把英文符号写出中文符号,比如说:冒号、引号、括号
- 字符串拼接的时候,把字符串和数字拼接在一起
- 没有定义变量,比如说while的循环条件的变量
- “
==”比较运算符和“=”赋值运算符的混用
思路不清晰导致的问题解决方案
- 使用
print()函数 - 使用“
#”暂时注解部分代码
- 使用
被动掉坑:程序代码逻辑没有错,只是因为用户错误操作或者一些“例外情况”而导致的程序崩溃
- 被动掉坑问题的解决方案
- Python提供了异常处理机制,可以在异常出现的时候及时捕获,然后内部“消化”,让程序继续运行
- 多个except结构
- 捕获异常的顺序按照先子类后父类的顺序,为了避免遗漏可能出现的异常,可以在最后增加BaseException
- 被动掉坑问题的解决方案
1 | |
1 | |
上面的代码是只处理一个异常,所以只使用了一个
except
1 | |
上面的代码,想要处理多个异常,所以加了很多个except分支,从而判断异常的类型
18.3 异常处理机制
try...except...else结构- 如果
try块中没有抛出异常,则执行else块,如果try中抛出异常,则执行except块
- 如果
1 | |
try...except...else...finally结构finally块无论是否发生异常都会被执行,能常用来释放try块中申请的资源
1 | |
- Python常见的异常错误
| 序号 | 异常类型 | 描述 |
|---|---|---|
| 1 | ZeroDivisionError |
除(或取模)零(所有数据类型) |
| 2 | IndexError |
序列中没有此索引(index) |
| 3 | KeyError |
映射中没有这个键 |
| 4 | NameError |
未声明/初始化对象(没有属性) |
| 5 | SyntaxError |
python语法错误 |
| 6 | ValueError |
传入无效的参数 |
traceback模块- 使用traceback模块打印异常信息
1 | |
18.4 PyCharm的调试模式
- 断点
- 程序运行到此处,暂时挂起,停止执行,此时可以详细观察程序的运行情况,方便做出进一步判断
- 进入调试试图
- 进入调试试图的三种方式
- 单机工具栏上的按钮
- 右键单击编辑区:点击:
debug‘模块名’ - 快捷键:
shift+F9
- 进入调试试图的三种方式
19. 编程的两大思想
19.1 两大编程思想
- 面向过程:事物比较简单,可以用线性的思维去解决
- 面向对象:事物比较复杂,使用简单的线性思维无法解决
- 共同点:面向对象和面向过程都是解决实际问题的一种思维方式
二者相辅相成,并不是对立的
解决复杂问题,通过面向对象方式便于我们从宏观上把握事物之间复杂的关系,方便我们分析整个系统,具体到围观操作,仍然使用面向过程方式来处理
19.2 类和对象的创建
- 类
- 类别:分门别类,物以类聚,人类、鸟类、动物类、植物类
- 类是多个类似事物组成的群体的统称。能够帮助我们快速理解和判断事物的性质
- 数据类型
- 不同的数据类型属于不同的类
- 使用内置函数
type()查看数据类型
- 对象
- 100、99都是
int类之下包含的相似的不同个例,这个个例专业术语称为实例或者对象 - 一切皆对象、万物皆对象
- 100、99都是
- 创建类的语法
1 | |
- 类的组成
- 类属性
- 实例方法
- 静态方法
- 类方法
1 | |
- 对象的创建
- 对象的创建又称为类的实例化
- 语法:
实例名 = 类名() - 意义:有了实例,就可以调用类中的内容
19.3 类对象与类属性
1 | |
在调用方法的时候,有一些不一样的方式,第一种就是
对象名.方法名,如stu1.eat(),第二种是类名.方法名(类的对象),如student.eat(stu1),这里的类的对象,其实就是指在声明中的self
19.4 类方法与静态方法
- 类属性:类中方法外的变量称为类属性,被该类的所有对象所共享
- 类方法:使用
@classmethod修饰的方法,使用类名直接访问的方法 - 静态方法:使用
@staticmethod修饰的主发,使用类名直接访问的方法
1 | |
动态绑定属性和方法
- Python是动态语言,在创建对象之后,可以动态地绑定属性和方法
1 | |
- 编程实现
- 面向对象
- 面向过程
- 类对象
class- 类属性
- 类方法
- 实例方法
- 静态方法
- 实例对象
- 类名(),创建实例对象
- 动态绑定属性
- 动态绑定方法
20. 面向对象的三大特性
面向对象的三大特性
- 封装:提高程序的安全性
- 将数据(属性)和行为(方法)包装到类对象中。在方法内部对属性进行操作,在类对象的外部调用方法。这样,无需关心方法内部的具体实现细节,从而隔离了复杂类
- 在Python中没有专门的修饰符用于属性的私有,如果该属性不希望在类对象外部被访问,前边使用两个”_”
- 继承:提高代码的复用性
- 多态:提高程序的可扩展性和可维护性
20.1 封装
封装就是将一些属性或者方法封装在类内,使得类内可以访问,类外不能访问
1 | |
20.2 继承
- 语法格式
1 | |
- 如果一个类没有继承任何类,则默认继承object
- python支持多继承
- 定义子类时,必须在其构造函数中调用父类的构造函数
1 | |
20.3 方法重写
- 如果子类对继承自父类的某个属性或方法不太满意,可以从子类中对其(方法体)进行重新编写
- 子类重写后的方法中可以通过
super().xxx()调用父类中被重写的方法
1 | |
20.4 object类
boject类是所有类的父亲,因此所有类都有object类的属性和方法- 内置函数
dir()可以查看指定对象所有属性 object有一个__str__()方法,用于返回一个对于“对象的描述”,对应于内置函数str()经常用于print()方法,帮助我们查看对象的信息,所以我们经常会对__str__()进行重写
1 | |
我们经常会在定义一个类之后,重写他的
__str__()方法,来对类进行一个描述
20.5 多态
- 简单的说,多态就是“具有多种形态”,它指的是:即便不知道一个变量所引用的对象到底是什么类型,仍然可以通过这个变量调用方法,在运行过程中根据变量所引用对象的类型,动态决定调用哪个对象中的方法
1 | |
- 静态语言和动态语言关于多态的区别
- 静态语言实现多态的三个必要条件
- 继承
- 方法重写
- 父类引用指向子类对象
- 动态语言的多态崇尚“鸭子类型”,当看到一只鸟走起来像鸭子、游泳起来像鸭子、收起来也想鸭子,那么这只鸟就可以被称为鸭子。在鸭子类型中,不需要关心对象是什么类型,到底是不是鸭子,只关心对象的行为
- 静态语言实现多态的三个必要条件
20.6 特殊方法和特殊属性
| 名称 | 描述 | |
|---|---|---|
| 特殊属性 | __dict__ |
获得类对象或实例对象所绑定的所有属性和方法的字典 |
| 特殊方法 | __len__() |
通过重写方法,让内置函数len()的参数可以自定义类型 |
| 特殊方法 | __add__() |
通过重写方法,可使用自定义对象具有“+”功能 |
| 特殊方法 | __new__() |
用于创建对象 |
| 特殊方法 | __init__() |
对创建的对象进行初始化 |
- 特殊属性
1 | |
- 特殊方法
1 | |
下面的代码主要是介绍__init__()和__new__()方法的意思
1 | |
根据上面代码的输出结果,不难得出有一些结论,其实在创建实例对象的过程中,首先先创建了一个
Person('张三', 20),在类内,先是调用了new方法,在方法中又调用 了父类object的new方法,之后调用了init方法,最后才把实例化的Person赋值给p1
20.7 类的深拷贝和浅拷贝
- 变量的赋值操作
- 只是形成两个变量,实际上还是指向同一个对象
1 | |
- 浅拷贝
- Python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,源对象与拷贝对象会引用同一个子对象
1 | |
由代码打印出来的
id可以得到,浅拷贝只会拷贝父对象,子对象没有进行拷贝,得到的子对象的id都是相同的
- 深拷贝
- 使用
copy模块的deepcopy函数,递归拷贝对象中包含的子对象,源对象和拷贝对象所有的子对象也不相同
- 使用
1 | |
由打印出来的
id可以发现,深拷贝中,不仅父对象被拷贝,父对象中的每个子对象也都被拷贝
21. 模块
21.1 什么叫模块
- 模块的英文单词为
Modules - 函数与模块的关系
- 一个模块中可以包含N多个函数
- 在Python中一个扩展名为
.py的文件就是一个模块 - 使用模块的好处
- 方便其它程序和脚本的导入与使用
- 避免函数名和变量名冲突
- 提高代码的可维护性
- 提高代码的可重用性
21.2 自定义模块
- 创建模块
- 新建一个
.py文件,名称尽量不要与Python自带的标准模块名称相同
- 新建一个
- 导入模块
1 | |
21.3 以主程序的形式执行
- 在每个模块的定义中都包括一个记录模块名称的变量
__name__,程序可以检查该变量,以确定他们在哪个模块中执行。如果一个模块不是被导入到其它程序中执行,那么它可能在解释器的顶级模块中执行。顶级模块的__name__变量的值为__main__
1 | |
1 | |
21.4 Python中的包
包是一个分层次的目录结构,它将一组功能相近的模块组织在一个目录下
作用:
- 代码规范
- 避免模块名称冲突
包和目录的区别
- 包括
__init__.py文件的目录称为包 - 目录里通常不包含
__init__.py文件
- 包括
包的导入
import 包名.模块名
导入带有包的模块时注意事项
import pageage1import cakc- 使用
import方式导入时,只能跟包名或者模块名 from pageage1 import module_Afrom pageage1.module_A import a- 使用
from...import可以导入包、模块、函数、变量
21.5 第三方模块的安装以及使用
- python中常用的内置模块
| 模块名 | 描述 |
|---|---|
sys |
与Python解释器及其环境操作相关的标准库 |
time |
提供与时间相关的各类函数的标准库 |
os |
提供了访问操作系统服务功能的标准库 |
calendar |
提供与日期相关的各类函数的标准库 |
urllib |
用于读取来自网上(服务器)的数据标准库 |
json |
用于使用json序列化和反序列化对象 |
re |
用于在字符串中执行正则表达式匹配和替换 |
math |
提供标准算术运算函数的标准库 |
decimal |
用于进行精确控制运算精度、有效数位和四舍五入操作的十进制运算 |
logging |
提供了灵活的记录事件、错误、警告和调试信息等日志信息的功能 |
- 第三方模块的安装
pip install 模块名
- 第三方模块的使用
import 模块名
22. 编码
22.1 编码格式介绍
- 常见的字符编码格式
- Python的解释器使用的是
Unicode(内存) .py文件在磁盘上使用UTF-8存储(外存)
- Python的解释器使用的是
22.2 文件的读写原理
- 文件读写俗称“IO操作”
- 文件读写操作流程
- 操作原理
- Python操作文件
- 打开或新建文件
- 读、写文件
- 关闭资源
- 又从
.py文件——>解释器——>OS——>操作——>硬盘
22.3 文件的读写操作
- 内置函数opem()创建文件对象
- 语法规则
file = open(filename [, mode, encoding])
1 | |
- 常用的文件打开模式
- 按照文件中数据的组织形式,文件分为以下两大类
- 文本文件:存储的普通“字符”文本,默认为Unicode字符集,可以使用记事本程序打开
- 二进制文件:把数据内容用“字节”进行存储,无法用记事本打开,必须使用专用的软件打开,如MP3音频文件,jpg图片等
- 按照文件中数据的组织形式,文件分为以下两大类
| 打开模式 | 描述 |
|---|---|
r |
以只读模式打开文件,文件的指针将会放在文件的开头 |
w |
以只写模式打开文件,如果文件不存在则创建,如果文件存在,则覆盖原有内容,文件的指针在文件的开头 |
a |
以追加模式打开文件,如果文件不存在则创建,文件指针在文件开头,如果文件存在,则在文件末尾追加内容,文件指针在原文件末尾 |
b |
以二进制方式打开文件,不能单独使用,需要与其它模式一起使用,rb或者wb |
+ |
以读写方式打开文件,不能单独使用,需要与其它模式一起使用,如 a+ |
22.4 文件对象常用的方法
| 方法名 | 说明 |
|---|---|
read([size]) |
从文件中读取size个字节或字符的内容返回。若省略[size],则读取到文件末尾,即一次读取文件所有内容 |
readline() |
从文本文件中读取一行内容 |
readlines() |
把文本文件中每一行都作为独立的字符串对象,并将这些对象放入列表返回 |
write(str) |
将字符串str内容写入文件 |
writelines(s_list) |
将字符串列表s_list写入文本文件,不添加换行符 |
seek(offset[, whence]) |
把文件指针移动到新的位置,offset表示相对于whence的位置:offset:为正往结束方向移动,为负往开始方向移动whence不同的值代表不同含义:0:从文件开头开始计算(默认值) 1:从当前位置开始计算 2:从文件尾开始计算 |
tell() |
返回文件指针的当前位置 |
flush() |
把缓冲区的内容写入文件,但不关闭文件 |
close() |
把缓冲区的内容写入文件,同时关闭文件,释放文件对象相关资源 |
22.5 with语句(上下文管理器)
- with语句可以自动管理上下文资源,无论什么原因跳出with块,都能确保文件正确的关闭,以此来达到释放资源的目的
1 | |
1 | |

22.6 目录操作
- OS模块是Python内置的与操作系统功能和文件系统相关的模块,该模块中的语句的执行结果通常与操作系统有关,在不同的操作系统上运行,得到的结果可能不一样
- OS模块与
os.path模块用于对目录或者文件进行操作
1 | |
- os模块操作目录相关函数
| 函数 | 说明 |
|---|---|
getcwd() |
返回当前的工作目录 |
listdir(path) |
返回指定路径下的文件和目录信息 |
mkdir(path[, mode]) |
创建目录 |
makedirs(path1/path2...[, mode]) |
创建多级目录 |
rmdir(path) |
删除目录 |
removedirs(path1/path2...) |
删除多级目录 |
chdir(path) |
将path设置为当前工作目录 |
os.path模块操作目录相关函数
| 函数 | 说明 |
|---|---|
abspath(path) |
用于获取文件或目录的绝对路径 |
exists(path) |
用于判断文件或目录是否存在,如果存在返回True,否则返回False |
join(path, name) |
将目录与目录或者文件拼接起来 |
splitext() |
分离文件名和扩展名 |
basename(path) |
从一个目录中提取文件名 |
dirname(path) |
从一个路径中获取文件路径,不包括文件名 |
isdir(path) |
用于判断是否为路径 |
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!