栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python学习的最后一部分

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python学习的最后一部分

目录

变量的作用域

1、变量的作用域

(1)程序代码能访问该变量的区域

(2)根据变量的有效范围可分为

递归函数

1、什么是递归函数

2、递归的组成部分

3、递归的调用过程

4、递归的优缺点

5、斐波拉契数列:

 异常处理

1、Python的异常处理机制

2、多个except结构

 3、try...except...else...finally结构

(1) finally块无论是否发生异常都会被执行,能常用来释放try块中申请的资源

(2)图示说明:

4、python常见的异常类型

5异常处理模块traceback

6、pycharm开发环境的调试

(1)断点

(2)进入调试视图

(3)进入完调试台后,点击向下的箭头进入下一步调试

编程的两大思想:面向过程和面向对象

类与对象

1、类

2、数据类型

3、对象

类的创建

1、创建类的语法

2、类的组成

3、图示:

对象的创建

1、对象的创建又称为类的实例化

2、语法:

3、例子:

4、图示:

类属性、类方法、静态方法

动态绑定属性和方法

1、Python是动态语言,在创建对象之后,可以动态地绑定属性和方法

2、图解

 3、对应图示的例子:

 面向对象的三大特征

1、封装:提高程序的安全性

2、继承:提高代码的复用性

3、多态:提高程序的可扩展性和可维护性

4、封装例子:

5、继承

(1)语法格式

(2)如果一个类没有继承任何类,则默认继承object

(3)Python支持多继承

(4)定义子类时,必须在其构造函数中调用父类的构造函数

(5)多继承例子:

6、方法重写

 7、object类

8、多态

 9、特殊的属性和方法

10、类的浅拷贝与深拷贝

(1)变量的赋值操作

(2)浅拷贝

(3)深拷贝

(4)变量赋值操作例子:

 模块

1、模块

2、函数与模块的关系

3、在Python中一个扩展名为.py的文件就是一个模块

4、使用模块的好处

5、自定义模块

(1)创建模块

(2)导入模块

(3)模块导入(自己创建的模块)

(4)以主程序形式运行

6、Python中的包

(1)包是一个分层次的目录结构,它将一组功能相近的模块组织在一个目录下

(2)作用:

(3)包与目录的区别

(4)包的导入

 7、python中仓用的内容模块

第三模块的安装及使用

 编码格式

文件的读写

 常用的文件打开模式

1、文件的类型

with语句

1、with语句(上下文管理器)

操作目录


变量的作用域

1、变量的作用域

(1)程序代码能访问该变量的区域

(2)根据变量的有效范围可分为

      ①局部变量

在函数内定义并使用的变量,只在函数内部有效,局部变量使用global声明,这个变量就会就成全局变量

    ②全局变量

函数体外定义的变量,可作用于函数内外

例子:

def fun(a,b):
    c=a=b  #c,就称为局部变量,因为c实在函数体内定义的变量a,b为函数的形参,通范围也是函数内部,相当于局部变量
    print(c)

#print(c)   因为a,c超出了其作用的范围所以会报错
#print(a)


name='杨老师'
def fun2():
    print(name)

#调用函数

fun2()


def fun3():
    global age   #函数内部定义的变量,局部变量,局部变量使用global声明,这个变量实际上就变成了全局变量
    age=20
    print(age)

fun3()
print(age)

输出结果:

递归函数

1、什么是递归函数

如果在一个函数的函数体内调用了该函数本身,这个函数就称为递归函数

2、递归的组成部分

递归调用与递归终止条件

3、递归的调用过程

每递归调用一次函数,都会在栈内存分配一个栈帧,

每执行完一次函数,都会释放相应的空间

4、递归的优缺点

缺点:占用内存多,效率低下

优点:思路和代码简单

例子:

def fac(n):
    if n==1:
        return 1
    else:
        res= n * fac(n-1)
        return  res

print(fac(6))

输出结果:

5、斐波拉契数列:

第一项:1

第二项:1

第三项:2

第四项:3

第五项:5

。。。。。。

也就是等于前面两项结果之和

例子:

#实现斐波拉契数列
def fib(n):
    if n==1:
        return 1
    elif n==2:
        return 1
    else:
        return fib(n-1)+fib(n-2)

#斐波拉契数列6位上的数字
print(fib(6))
print('---------------------')

#输出这个数列前6位项的数字
for i in range(1,7):
    print(fib(i))

输出结果:

 异常处理

1、Python的异常处理机制

被动掉坑问题的解决方案

Python提供了异常处理机制,可以在异常出现时即时捕获,然后内部“消化",让程序继续运行

2、多个except结构

捕获异常的顺序按照先子类后父亲类的顺序,为了避免遗漏可能出现的异常,可以在最后增加baseException

 例子:

ry:
    a=int(input('请输入第一个整数'))
    b=int(input('请输入第二个整数'))
    result=a/b
    print('结果为:',result)

except ZeroDivisionError :
    print('对不起,除数不允许为0')
except ValueError:
    print('只能输入数字串')
print('程序结束

输出结果:

 

 3、try...except...else...finally结构

(1) finally块无论是否发生异常都会被执行,能常用来释放try块中申请的资源

try:

n1=int(input(’请输入一个整数:∵'))

n2=int(input(’请输入另一个整数:'))

result=n1/n2

except  baseException  as   e :

print('出错了')

print(e)

else:

print('结果为:', result)

finally:

print(’无论是否产生异常,总会被执行的代码')

print('程序结束')

(2)图示说明:

4、python常见的异常类型
序号异常类型描述
1zeroDivisionError除(或取模)零(所有数据类型)
2IndexError序列中没有此索引(index)
3KeyError映射中没有这个键
4NameError未声明/初始化对象(没有属性)
5SyntaxErrorPython语法错误
6ValueError传入无效的参数

5异常处理模块traceback

使用traceback模块打印异常信息

#print(10/0)
import  traceback
try:
    print('----------')
    print(1/10)
except:
    traceback.print_exc()

输出结果:

 

6、pycharm开发环境的调试

(1)断点

程序运行到此处,暂时挂起,停止执行。此时可以详细观察程序的运行情况,方便做出进一步的判断

 

(2)进入调试视图

进入调试视图的三种方式

单击工具栏上的按钮

 

右键单击编辑区:点击: debug'模块名’

快捷键:shift+F9

(3)进入完调试台后,点击向下的箭头进入下一步调试

 

编程的两大思想:面向过程和面向对象
面向过程面向对象
区别事物比较简单,可以用线性的思维去解决事物比较复杂,使用简单的线性思维无法解决
共同点面向过程和面向对象都是解决实际问题的一种思维方式

二者相辅相成,并不是对立的

解决复杂问题,通过面向对象方式便于我们从宏观上把握事物之间复杂的关系、方便我们分析整个系统;具体到微观操作,仍然使用面向过程方式来处理

类与对象

1、类

类是多个类似事物组成的群体的统称。能够帮助我们快速理解和判断事物的性质

2、数据类型

不同的数据类型属于不同的类

使用内置函数查看数据类型

print(type (100))          

print(type(99))           

print(type(520))          

3、对象

100、99、520都是int类之下包含的相似的不同个例,这个个例专业数语称为实例或对象

类的创建

1、创建类的语法

class  Studant :

pass

2、类的组成

类属性

实例方法

静态方法

类方法

3、图示:

 

例子:

class Student:   #Student为类的名称(类名)由一个或多个单纯组成,每个单纯的首字母大写,其余小写
    pass
#python中一切皆对象吗?内存空有空间开吗
print(id(Student))
print(type(Student))
print(Student)

输出结果:

 例子:

lass Student:
    nativ_pace='吉林'   #直接写在类里的变量,称为类属性
    def __init__(self,name,age):
        self.name=name   #self 称为实体属性,进行了一个赋值的操作,景局部变量的name的值赋给实体属性
        self.age=age

    #实例方法
    def eat(self):
        print('学生在吃饭。。。')

        #静态方法
        @staticmethod
        def method():
            print('我使用了statticmethod进行修饰,所以我是静态方法')

#在类之外定义的函数,在类之内定义的称方法

def drink():
    print('喝水')

对象的创建

1、对象的创建又称为类的实例化

2、语法:

实例名=类名()

3、例子:

#创建Student类的实例对象

stu=Student(' Jack', 20)

print(stu.name).    #实例属性

print(stu.age)    #实例属性

stu.info()        #实例方法

意义:有了实例,就可以调用类中的内容

4、图示:

 例子:

class Student:
    nativ_pace='吉林'   #直接写在类里的变量,称为类属性
    def __init__(self,name,age):
        self.name=name   #self 称为实体属性,进行了一个赋值的操作,景局部变量的name的值赋给实体属性
        self.age=age

    #实例方法
    def eat(self):
        print('学生在吃饭。。。')

    #静态方法
    @staticmethod
    def method():
        print('我使用了statticmethod进行修饰,所以我是静态方法')   
#类方法
    @classmethod
    def cm(cls):
        print('我是类方法,因为我使用了classmethod进行修饰')

     
#在类之外定义的函数,在类之内定义的称方法

def drink():
    print('喝水')


#创建Student类的对象
stu1=Student('张三',20)
print(id(stu1))
print(type(stu1))
print(stu1)
print('----------------------------------')
print(id(Student))   #Student是类名
print(type(Student))
print(Student)

#调用方法
stu1.eat()
print(stu1.name)   #对象名.方法名()
print(stu1.age)

print('---------------')
Student.eat(stu1)    #改行代码功能与stu1.eat()相同,也就是有两种调用方法
#类名.方法名(类的对象)--》实际上就是方法定义处的self

输出结果:

 

类属性、类方法、静态方法

1、类属性:类中方法外的变量称为类属性,被该类的所有对象

所共享

2、类方法:使用@classmethod修饰的方法,使用类名直接访问的方法

3、静态方法:使用@staticmethod修饰的主法,使用类名直接访问的方法

print(Student.native_place)..#访问类属性

student.cm() .#调用类方法

Student.sm().#调用静态方法

例子:

class Student:
    nativ_pace='吉林'   #直接写在类里的变量,称为类属性
    def __init__(self,name,age):
        self.name=name   #self 称为实体属性,进行了一个赋值的操作,景局部变量的name的值赋给实体属性
        self.age=age

    #实例方法
    def eat(self):
        print('学生在吃饭。。。')

    #静态方法
    @staticmethod
    def method():
        print('我使用了statticmethod进行修饰,所以我是静态方法')
    #类方法
    @classmethod
    def cm(cls):
        print('我是类方法,因为我使用了classmethod进行修饰')
#类属性的使用方法
stu1=(Student('张三',20))
stu2=Student('李四',30)
print(stu1.nativ_pace)
print(stu2.nativ_pace)
Student.nativ_pace='天津'
print(stu1.nativ_pace)
print(stu2.nativ_pace)
print('-----------类方法的使用方式--------------')
Student.cm()
print('-----------静态方法的使用方式--------------')
Student.method()

输出结果:

 

动态绑定属性和方法

1、Python是动态语言,在创建对象之后,可以动态地绑定属性和方法

def show ():

print(’我是一函数')

stu=Student (' Jack', 20)

stu.gender=’男’     #动态绑定性别

print(stu.name,stu.age, stu.gender)

stu.show=show   #动态绑定方法

stu. show()

2、图解

 3、对应图示的例子:
lass Student:
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def eat(self):
        print(self.name+'在吃饭')

stu1=Student('张三',20)
stu2=Student('李四',30)
print(id(stu1))
print(id(stu2))
print('-------------------为stu2动态绑定性别属性-------------')
stu2.gender='女'
print(stu1.name,stu1.age)
print(stu2.name,stu2.age,stu2.gender)

print('----------------动态绑定方法--------------------')


def show():
    print('定义在类之外,称函数')

stu1.show=show()   #先要绑定方法,才能调用
stu1.show

输出结果:

 面向对象的三大特征

1、封装:提高程序的安全性

(1)将数据(属性)和行为(方法)包装到类对象中。在方法内部对属性进行操作,在类对象的外部调用方法。这样,无需关心方法内部的具体实现细节,从而隔离了复杂度。

(2)在Python中没有专门的修饰符用于属性的私有,如果该属性不希望在类对象外部被访问,前边使用两个“二”。

2、继承:提高代码的复用性

3、多态:提高程序的可扩展性和可维护性

4、封装例子:
lass Student:
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def show(self):
        print(self.name,self.__age)

stu=Student('张三',20)

#在类的外面使用name和age
print(stu.name)
# print(stu.__age)  运行后会报错,因为遇到__代表它不向外在类的外面被看到

5、继承

(1)语法格式

class子类类名(父类1,父类2..):

pass

(2)如果一个类没有继承任何类,则默认继承object

(3)Python支持多继承

(4)定义子类时,必须在其构造函数中调用父类的构造函数

例子:

lass Student(Person):
    def __init__(self,name,age,stu_no):
        super().__init__(name,age)
        self.stu_no=stu_no

class Teacher(Person):
    def __init__(self,name,age,teachofyear):
        super().__init__(name,age)
        self.teachofyear=teachofyear


stu=Student('张三',20,'10001')
teacher=Teacher('李四',34,10)

stu.info()
teacher.info()

输出结果:

 

(5)多继承例子:
class  A(object):
    pass
class B(object):
    pass
class C(A,B):
    pass

6、方法重写

如果子类对继承自父类的某个属性或方法不满意,可以在子类中对其(方法体)进行重新编写

子类重写后的方法中可以通过super().xxx()调用父类中被重写的方法

例子:

class Person(object):   #Person类继承object类
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def info(self):
        print(self.name,self.age)
        
        
class Student(Person):
    def __init__(self,name,age,stu_no):
        super().__init__(name,age)
        self.stu_no=stu_no
    def info(self):
        super().info()
        print(self.stu_no)

class Teacher(Person):
    def __init__(self,name,age,teachofyear):
        super().__init__(name,age)
        self.teachofyear=teachofyear

    def info(self):    #方法重写
        super().info()
        print('教龄',self.teachofyear)


stu=Student('张三',20,'10001')
teacher=Teacher('李四',34,10)

stu.info()
teacher.info()

print('------------方法重写---------')
teacher.info()

输出结果:

 7、object类

.object类是所有类的父类,因此所有类都有object类的属性和方法。·内置函数dir()可以查看指定对象所有属性

.Object有一个_str_()方法,用于返回一个对于“对象的描述”",对应于内置函数str()经常用于print()方法,帮我们查看对象的信息,所以我们经常会对_str__()进行重写

例子:

class Student:
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def __str__(self):
        return '我的名字是{0},今年{1}岁'.format(self.name,self.age)
stu=Student('张三',20)
print(dir(stu))
print(stu)   #默认会调用__str__()这样的方法
print(type(stu))

8、多态

简单地说,多态就是"具有多种形态",它指的是:即便不知道一个变量所引用的对象到底是什么类型,仍然可以通过这个变量调用方法,在运行过程中根据变量所引用对象的类型,动态决定调用哪个对象中的方法。

静态语言和动态语言关于多态的区别:

①静态语言实现(Java就是静态语言)多态的三个必要条件:

继承

方法重写

父类引用指向子类对象

②动态语言(python是动态语言)的多态崇尚“鸭子类型"当看到一只鸟走起来像鸭子、游泳起来像鸭子、收起来也像鸭子,那么这只鸟就可以被称为鸭子。在鸭子类型中,不需要关心对象是什么类型,到底是不是鸭子,只关心对象的行为。

例子:

class Animal(object):
    def eat(self):
        print('动物会吃')
class Dog(Animal):
    def eat(self):
        print('狗吃骨头')
class Cat(Animal):
    def eat(self):
        print('猫吃鱼...')

class Person:
    def eat(self):
        print('人吃五谷杂粮')

#定义一个函数
def fun(obj):
    obj.eat()

#开始调用函数
fun(Cat())
fun(Dog())
fun(Animal())
print('-------------------')
#Person与Animal、Cat、Dog不存在继承关系,但是因为Person中也有eat方法,所以它也会取调用eat方法
fun(Person())

输出结果:

 9、特殊的属性和方法
名称描述
特殊属性_dict_获得类对象或实例对象所绑定的所有属性和方法的字典
特殊方法_len_()_len_()方法,让内置函数len()的参数可以是自定义类型
add_()通过重写_add_()方法,可使用自定义对象具有“+”功能
_new_()用于创建对象
_init_()对创建的对象进行初始化

特殊属性例子:

class A:
    pass
class B:
    pass
class C(A,B):
    def __init__(self,name,age):
        self.name=name
        self.age=age

#创建C类对象
x=C('Jack',20)  #x是C类型的一个实例对象
print(x.__dict__)   #实例对象的属性字典
print(C.__dict__)   #如果是一个类对象会看到他的属性和方法
print('-------------------')
print(x.__class__)   #输出对象所属的类
print(C.__bases__)  #C类的父亲类型的元素
print(C.__base__)   #输出形参里最近的父亲类型元素
print(C.__mro__)  #类的层次结构
print(A.__subclasses__()) #子类的列表

输出结果:

 

特殊方法的例子:

a=20
b=100
c=a+b  #两个整数类型的对象相加操作
d=a.__add__(b)  #结果完全相同

print(c)
print(d)


class Student:
    def __init__(self,name):
        self.name=name
    def __add__(self, other):
        return self.name + other.name

    def __len__(self):
        return len(self.name)


stu1=Student('张三')
stu2=Student('李四')

s=stu1+stu2  #实现了两个对象的加法操作(因为在Student类中编写了__add__()的方法,若是没有编写直接相加会报错)
print(s)
#或者另一种实现方法
s=stu1.__add__(stu2)

print('--------------------------')
lst=[11,22,33,44]
print(len(lst))  #len是内置函数len,用来计算长度
print(lst.__len__())
#print(len(stu1))  #直接使用会报错,要是一定要输出就要编写len()的方法

输出结果:

 

特殊方法例子:

class Person(object):
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def __new__(cls, *args, **kwargs):
        print('__new__被调用执行了,cls的id值为{0}'.format(id(cls)))
        obj=super().__new__(cls)
        print('创建的对象的id为:{0}'.format(id(obj)))
        return  obj

    def __init__(self,name,age):
        print('__init__被调用了,self的id值为:{0}'.format(id(self)))
        self.name=name
        self.age=age

print('object这个类对象的id为:{0}'.format(id(object)))
print('Person这个类对象的id为:{0}'.format(id(Person)))

#创建Person类的实例对象
P1=Person('张三',20)
print('P1这个Person类的实例对象的id:{0}'.format(id(P1)))

输出结果:

 运行的图示步骤说明:

 

10、类的浅拷贝与深拷贝

(1)变量的赋值操作

只是形成两个变量,实际上还是指向同一个对象

(2)浅拷贝

 Python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,源对象与拷贝对象会引用同一个子对象

(3)深拷贝

使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象,源对雾和拷贝对象所有的子对象也不相同

(4)变量赋值操作例子:
class CPU:
    pass
class Disk:
    pass
class Computer:
    def __init__(self,cpu,disk):
        self.cpu=cpu
        self.disk=disk

#(1)变量的赋值
cpu1=CPU()
cpu2=CPU()
print(cpu1)
print(cpu2)

输出结果:

 结果分析图:

 浅拷贝的例子

lass CPU:
    pass
class Disk:
    pass
class Computer:
    def __init__(self,cpu,disk):
        self.cpu=cpu
        self.disk=disk

#(1)变量的赋值
cpu1=CPU()
cpu2=CPU()
print(cpu1)
print(cpu2)

#(2)类的浅拷贝
print('----------------------')
disk=Disk()  #创建一个计算机类的对象
computer=Computer(cpu1,disk)  #创建一个计算机的对象

#浅拷贝
import  copy
computer2=copy.copy(computer)
print(computer,computer.cpu,computer.disk)
print(computer2,computer2.cpu,computer2.disk)

 分析图示:

 深拷贝的例子:

class CPU:
    pass
class Disk:
    pass
class Computer:
    def __init__(self,cpu,disk):
        self.cpu=cpu
        self.disk=disk

#(1)变量的赋值
cpu1=CPU()
cpu2=CPU()
print(cpu1)
print(cpu2)

#(2)类的浅拷贝
print('----------------------')
disk=Disk()  #创建一个计算机类的对象
computer=Computer(cpu1,disk)  #创建一个计算机的对象

#浅拷贝
import  copy
computer2=copy.copy(computer)
print(computer,computer.cpu,computer.disk)
print(computer2,computer2.cpu,computer2.disk)

#深拷贝
computer3=copy.deepcopy(computer)
print(computer,computer.cpu,computer.disk)
print(computer3,computer3.cpu,computer3.disk)

图示:

 模块

1、模块

模块英文为Modules

2、函数与模块的关系

一个模块中可以包含N多个函数

3、在Python中一个扩展名为.py的文件就是一个模块

4、使用模块的好处

方便其它程序和脚本的导入并使用

避免函数名和变量名冲突

提高代码的维扩一心

提高代码的可重用性

5、自定义模块

(1)创建模块

新建一个.py文件,名称尽量不要与Python自带的标准模块名称相同

(2)导入模块

import 模块名称 [as别名]

From 模块名称 import函数/变量/类

(3)模块导入(自己创建的模块)

 

 

也可以直接使用from导入,导入后可直接使用

(4)以主程序形式运行

在每个模块的定义中都包括一个记录模块名称的变量_name_,程序可以检查该变量,以确定他们在哪个模块中执行。如果一个模块不是被导入到其它程序中执行,那么它可能在解释器的顶级模块中执行。顶级模块的_name_变量的值为_main_

if_name_ = '__main_' :

pass

6、Python中的包

(1)包是一个分层次的目录结构,它将一组功能相近的模块组织在一个目录下

(2)作用:

代码规范

避免模块名称冲突

(3)包与目录的区别

包含_init_.py文件的目录称为包

目录里通常不包含_init__.py文件

(4)包的导入

import包名.模块名

 

 7、python中仓用的内容模块
模块名描述
sys与Python解释器及其环境操作相关的标准库
time提供与时间相关的各种函数的标准库
os提供了访问操作系统服务功能的标准库
calendar提供与日期相关的各种函数的标准库
urllib用于读取来自网上(服务器)的数据标准库j
json

用于使用JSON序列化和反序列化对象

re用于在字符串中执行正则表达式匹配和替换
math提供标准算术运算函数的标准库
decimal用于进行精确控制运算精度、有效数位和四舍五入操作的十进制运算
logging  提供了灵活的记录事件、错误、警告和调试信息等目志信息的功能

第三模块的安装及使用

在cmd下输入pip install +需要安装的模块,然后需要等待一会,如果程序不报错的话就代表安装成功

 

 编码格式

常见的字符编码格式

 Python的解释器使用的是Unicode (内存)

py文件在磁盘上使用UTF-8存储(外存)

 

文件的读写

文件的读写原理

 文件的读写操作

 常用的文件打开模式

1、文件的类型

按文件中数据的组织形式,文件分为以下两大类

(1)文本文件:存储的是普通“字符"文本,默认为unicode字符集,可以使用记本事程序打开

(2)二进制文件:把数据内容用“字节"进行存储,无法用记事本打开,必须使用专用的软件打开,举例: mp3音频文件,jpg图片.doc文档等

打开模式描述
r以只读模式打开文件,文件的指针将会放在文件的开头
w以只写模式打开文件,如果文件不存在则创建,如果文件存在,则覆盖原有内容,文件指针在文件的
a以追加模式打开文件,如果文件不存在则创建,文件指针在文件开头,如果文件存在,则在文件末尾追加内容,文件指针在原文件末尾
b以二进制方式打开文件,不能单独使用,需要与共它模式一起使用,rb,或者wb
+以读写方式打开文件,不能单独使用,需要与其它模式一起使用,a+

文件对象的常用方法

方法名说明
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()把缓冲区的内容写入文件,同时关闭文件,释放文件对象相关

with语句

1、with语句(上下文管理器)

 with语句可以自动管理上下文资源,不论什么原因跳出with块,都能确保文件正确的关闭,以此来达到释放资源的目的

 例子:

 

 

 第三张图实现了enter和exit的方法,所以就称为上下文管理器

操作目录

os模块是Python内置的与操作系统功能和文件系统相关的模块,该模块中的语句的执行结果通常与操作系统有关,在不同的操作系统上运行,得到的结果可能不一样。

os模块与os.path模块用于对目录或文件进行操作

 os模块操作目录相关函数

函数说明
getcwd ()返回当前的工作目录
listdir(path)返回指定路径下的文件和目录信息
mkdir(path[, mode])创建目录
makedirs(path1/path2.. . [, mode])创建多级目录
removedirs(path1/path2.. . . . .)删除多级目录
rmdir(path)删除目录
chdir(path)将path设置为当前工作目录

os.path模块操作目录相关函数

函数说明
abspath(path)

用于获取文件或目录的绝对路径

exists(path)

用于判断文件或目录是否存在,如果存在返回True,

否则返回False

join(path, name)将目录与目录或者文件名拼接起来
splitext()分离文件名和扩展名
basename(path)从一个目录中提取文件名
dirname(path)从一个路径中提取文件路径,不包括文件名
isdir(path)用于判断是否为路径

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/269031.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号