Python程序设计基础教程(微课版) 课件 代崴 第6章 - Python文件操作;第7章 - Python面向对象编程_第1页
Python程序设计基础教程(微课版) 课件 代崴 第6章 - Python文件操作;第7章 - Python面向对象编程_第2页
Python程序设计基础教程(微课版) 课件 代崴 第6章 - Python文件操作;第7章 - Python面向对象编程_第3页
Python程序设计基础教程(微课版) 课件 代崴 第6章 - Python文件操作;第7章 - Python面向对象编程_第4页
Python程序设计基础教程(微课版) 课件 代崴 第6章 - Python文件操作;第7章 - Python面向对象编程_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Python程序设计第6章Python文件操作学习目标了解文本/二进制文件识记文件打开模式掌握文件和目录基本操作知识目标能够操作文本文件和CSV文件能够完成基本目录操作能力目标数据完整性的重视良好组织结构对提高效率和减少错误的影响情感态度与价值观文件概述01020403文本文件操作CSV文件操作目录操作目

录文件概述01020403文本文件操作CSV文件操作目录操作目

录文件分类文件操作函数文件:计算机系统中用于存储信息的一种机制,允许将数据永久保存在磁盘或其他外存储器上文本文件二进制文件6.1文件概述120文本文件:保存字符编码的文件ASCIIUNICODEUTF-8GBK*.txt、*.html/*.htm、*.json、*.log、*.ini、源代码文件(*.py、*.cpp、*.java)6.1.1文件分类120二进制文件:保存数据在内存中的字节序列序列化:将内存中的数据对象以字节序列写入文件的过程反序列化:从文件中读取字节序列再转换成内存数据对象的过程压缩文件(*.zip、*.7z)可执行文件(*.exe、*.dll、*.so)图像文件(*.bmp、*.png、*.jpg)音视频文件(*.mp3、*.mp4、*.avi)专有文件(*.dwg、*.psd、*.trec)6.1.1文件分类121内置函数处理文本/二进制文件open()read()、write()、……close()标准库:csv、configparser、zipfile、pickle、sqlite3第三方库:openpyxl、python-docx、OpenCV、librosa、Pillow6.1.2文件操作函数121文件概述01020403文本文件操作CSV文件操作目录操作目

录文本文件操作020403CSV文件操作目录操作目

录文件概述01打开文本文件读/写文本文件关闭文本文件Python使用“文件对象”与文本文件交互open()打开文件并获取一个文件对象调用文件对象的方法读写内容close()关闭文件6.2文本文件操作121open():打开文本文件并返回一个文件对象,以便进行后续的操作file:要打开的文件路径字符串,可以是绝对路径,也可以是相对路径(相对于当前正在运行的*.py文件)mode:可选,指定文件打开模式的字符串6.2.1打开文件121变量=open(file[,optional_params])f1=open('demo.txt')f2=open('E:/points.dat','rb')6.2.1打开文件122字符串说明读写模式'r'仅读取(默认),从文件头开始读取,如果文件不存在则报错'w'仅写入,如果文件不存在则创建新的空文件,如果存在则清空文件内容'x'排它性创建,如果文件已存在则报错'a'追加模式,如果文件不存在则创建新的空文件,如果存在则在末尾追加内容'+'读写模式,可同时读取和写入,与r、w、x、a模式组合使用文件模式't'文本模式(默认),以文本格式打开文件'b'二进制模式,以二进制格式打开文件readlines([hint])读取文件的每一行,返回一个包含读取行的列表hint:可选,控制读取的行数,不指定则读取全部行6.2.2读取文件122f=open('names.txt')lines=f.readlines()#lines是一个列表forlinlines:#l是一个字符串print(l.strip('\n'))示例6-2readline([size])读取文件下一行中的size个字符并返回,未指定size默认读取整行适合文件较大的情况,循环调用处理多行数据6.2.2读取文件122f=open('names.txt')line=f.readline()#line是一个字符串,包含一行的内容whileline!='':print(line)line=f.readline()示例6-3全文按行处理时,可直接遍历文件对象,效果和循环调用readline()一样6.2.2读取文件123f=open('names.txt')forlinf:#l是一个字符串,包含一行的内容print(l)示例6-4read([size])从文件中读取size个字符,以一个字符串的形式返回未指定size默认读取所有内容6.2.2读取文件123f=open('names.txt','r')contents=f.read()#contents是一个字符串print(contents)示例6-4writelines(string_list)接收一个所有元素均为字符串的列表对象作为参数,依次将每个字符串写入文件该方法不会自动在每个字符串后添加换行符6.2.3写入文件123f=open('writelines_demo.txt','w')names=['Danie','Kitty','Branda']f.writelines(names)示例6-7close():关闭文件确保所有的数据都被正确地写入到磁盘释放系统资源6.2.4关闭文件124f=open('writelines_demo.txt','w')names=['Danie','Kitty','Branda']f.writelines(names)f.close()示例6-8with子句:确保文件在代码块执行完毕后自动关闭6.2.4关闭文件124withopen('writelines_demo.txt','w')asf:

names=['Danie','Kitty','Branda']

f.writelines(names)示例6-9文件概述01020403文本文件操作CSV文件操作目录操作目

录CSV文件操作0304目录操作目

录文件概述0102文本文件操作csv模块读/写CSV文件CSV文件:CommaSeparatedValues,纯文本文件,用于存储表格数据可以包含任意数量的记录一般情况下一行一条记录,不同字段用逗号分隔可与excel文件互相转换,也可在Excel软件中编辑6.3CSV文件操作131内置csv模块,可直接导入读写CSV文件之前需要通过open()获取文件对象6.3.1导入模块131importcsvcsv.reader():创建一个csv阅读器对象,该对象是可迭代对象,通过遍历该对象处理文件的每一行6.3.2读取文件131importcsvwithopen('csv_read_demo.csv')asf:reader=csv.reader(f)next(reader)#跳过标题行forrowinreader:sex='女'ifrow[2]=='F'else'男'print(f'{row[0]},{sex},学号是{row[1]}')示例6-14csv.writer():创建一个csv写入器对象,通过该对象的writerow()/writerows()写入内容6.3.3写入文件132importcsvtitle=['姓名','职业','年龄']rows=[['张三','飞行员',32],['李四','工程师',28],['钱五','插画师',26]]withopen('write_csv_demo.csv','w',newline='')asf:writer=csv.writer(f)writer.writerow(title)writer.writerows(rows)示例6-15文件概述01020403文本文件操作CSV文件操作目录操作目

录目录操作04目

录文件概述0102文本文件操作03CSV文件操作移动/复制/删除文件创建/删除/遍历目录文件路径操作目录是组织和管理文件的关键组件shutil模块os模块6.4目录操作136shutil模块move():移动文件,移动后原位置的文件不存在copy():拷贝文件,复制后不会更改原文件若目标位置已经存在同名文件,该文件将被覆盖6.4.1文件移动和复制136importshutilsrc1='src_files/230114.log'#原文件路径dst1='dst_files/230114.log'#目标文件路径shutil.move(src1,dst1)#移动文件src2='src_files/230115.log'#原文件路径dst2='dst_files/230115.log'#目标文件路径shutil.copy(src2,dst2)#复制文件示例6-16os模块remove():删除文件,操作不可逆6.4.2文件删除136importosfile_path='src_files/230116.log'os.remove(file_path)示例6-17os模块mkdir():创建目录rmdir():删除目录6.4.3目录创建和删除136importosdir_path='test_dir1'os.mkdir(dir_path)os.rmdir(dir_path)示例6-18os.walk():递归遍历指定目录每次返回一个三元组:(dirpath,dirnames,filenames)dirpath:当前正在遍历的目录路径dirnames:该目录下的子目录列表filenames:该目录下的非目录文件列表6.4.4目录遍历136importosforroot,dirs,filesinos.walk('E:/src/'):forfileinfiles:print(os.path.join(root,file))示例6-19os.listdir():返回指定目录下所有文件和子目录的列表,不递归遍历子目录6.4.4目录遍历137importosfiles=os.listdir('../chapter06')forfileinfiles:print(file)示例6-20os.path.exists():检查指定文件或目录是否存在,如果存在则返回True,否则返回False6.4.5文件路径操作137importosimportshutilsrc='src_files/230115.log'#原文件路径dst='dst_files/230115.log'#目标文件路径ifos.path.exists(dst):next_step=input(f'{dst}已存在,仍要复制吗?(Y/n):')ifnext_step=='Y':shutil.copy(src,dst)print('拷贝完成!')else:print('拷贝停止!')示例6-21os.path.join():将多个路径拼接成一个完整的文件路径字符串6.4.5文件路径操作137importosroot=r'E:\src'sub_dir='chapter06'file_name='demo.txt'full_path=os.path.join(root,sub_dir,file_name)print(full_path)#打印:E:\src\chapter06\demo.txt示例6-22os.path.abspath():返回指定文件的绝对路径,如果给定的路径已经是绝对路径,则返回该路径;否则将其转换为绝对路径6.4.5文件路径操作138importosrelative_path='6-18.py'absolute_path=os.path.abspath(relative_path)#打印结果:E:\src\chapter06\6-18.pyprint(absolute_path)示例6-23解析文件路径os.path.dirname():返回指定文件的目录部分,不含文件名部分os.path.basename():返回指定路径的文件名部分,不含目录部分os.path.splitext():将文件路径按最后一个“.”分割,返回一个包含文件名和扩展名的元组6.4.5文件路径操作1386.4.5文件路径操作138importosfull_path=r'E:\src\demo.py'dir_path=os.path.dirname(full_path)

#目录部分base_name=os.path.basename(full_path)

#完整文件名#文件名、扩展名file_name,ext=os.path.splitext(base_name) print(dir_path) #打印结果:E:\srcprint(base_name) #打印结果:demo.pyprint(file_name) #打印结果:demoprint(ext) #打印结果:.py示例6-24本章结束Python程序设计第7章Python面向对象编程学习目标识记类的语法理解面向对象三大特征掌握面向对象三大特征的使用方法知识目标能够正确编写Python类能够使用Python类解决实际问题能力目标数据隐私的尊重和保护创新精神和可持续发展意识多样性思维和包容性情感态度与价值观Python类与对象01020403封装继承多态目

录Python类与对象01020403封装继承多态目

录面向对象基本概念类的定义对象的使用面向过程程序设计以算法为中心问题->一系列步骤制作蛋糕:准备材料->搅拌面糊->烤制蛋糕胚->涂抹奶油->裱花装饰mix_batter(flour)bake_cake(power,minites)spread_cream(color)decoration(cream,ftruits,chocolate)面向对象程序设计7.1.1面向过程与面向对象程序设计1457.1.2类与对象146现实含义面向对象程序设计类和对象类一群具有相似特征或行为的个体的统称模板或者蓝图规定了一组属性(变量)和一组方法(函数)属于自定义的数据类型人类-张三宠物类-萨摩耶肉包微波炉类-货架上待售的某台微波炉对象某个类的一个具体实例,具有该类的属性和行为根据模板将属性值具体化之后,得到的一个类的实例个体拥有具体的属性值能使用类定义的方法封装:将数据和操作捆绑在一起,形成一个类定义每个类的职责隐藏了内部实现细节提高代码可读性和可维护性增加了数据的安全性和可靠性。继承:从已有的类派生出新类的过程避免重复编写相同的代码方便系统扩展多态:提高了代码的灵活性和扩展性7.1.3面向对象三大特征1467.2类的定义与对象使用1477.2.1关键字class147class:定义类定义一个空类class类名:#类体classCircle:pass示例7-17.2.2类属性和类方法147类属性:与类本身关联的属性所有对象能够共享的属性对于具体的实例来说意义不大类属性位于类的顶部,定义在类的任何方法之外使用类属性class类名:类属性1=值1类属性2=值2类名.类属性名7.2.2类属性和类方法148类属性的定义和使用classCircle:pi=3.14159default_line_color='黑色'default_fill_color='白色'print(Circle.pi)Circle.default_line_color='红色'示例7-27.2.2类属性和类方法148类方法:封装与类属性有关、与实例无关的功能不能直接访问实例属性和实例方法调用类方法class类名:@classmethoddef类方法名(cls,参数列表)#函数体类名.类方法(除cls之外的参数值)使用装饰器@classmethodcls:代表该方法所属的类,在类方法内部将cls当类名使用7.2.2类属性和类方法148类方法的定义和使用classCircle:@classmethoddefset_default_color(cls,line,fill):cls.default_line_color=linecls.default_fill_color=fillCircle.set_default_color('深蓝色','浅蓝色')示例7-37.2.3实例属性和实例方法149实例属性:类的对象各自持有的属性标识对象本身的特征值与对象自身密切关联,不应与其他对象共享举例每个人的身份证号每台洗衣机的品牌和型号每本书的书名和作者实例属性通常写在类的__init__()方法中7.2.3实例属性和实例方法149__init__()方法调用时机:创建类的新对象时作用:初始化新对象命名:__方法名__特定场景下自动调用开发者考虑具体实现魔术方法class类名:def__init__(self,参数1,参数2,...,参数N)self.实例属性1=参数1self.实例属性2=参数2...self.实例属性N=参数Nself:代表即将被创建出来的新对象self.实例属性名=值7.2.3实例属性和实例方法149实例属性的定义classCircle:def__init__(self,r,line_color=default_line_color,fill_color=default_fill_color):self.r=rself.line_color=line_colorself.fill_color=fill_color示例7-47.2.3实例属性和实例方法149实例的创建变量名=类名(__init__()方法中除了self之外的参数)classCircle:def__init__(self,r,

ine_color=default_line_color,fill_color=default_fill_color):

self.r=rself.line_color=line_colorself.fill_color=fill_colorc1=Circle(1.0)c2=Circle(2.0,'红色','黄色')示例7-47.2.3实例属性和实例方法150实例属性的使用对象.实例属性名classCircle:def__init__(self,r,

line_color=default_line_color,fill_color=default_fill_color):self.r=rself.line_color=line_colorself.fill_color=fill_colorc1=Circle(1.0)c2=Circle(2.0,'红色','黄色')print(f'半径{c1.r},线条{c1.line_color},填充{c1.fill_color}')示例7-47.2.3实例属性和实例方法150实例方法:与具体的对象关联的方法需要对象执行的行为调用实例方法class类名:def实例方法名(self,参数1,参数2,...,参数N)#代码块对象.实例方法(除self之外的其他参数)self:代表正在调用这个实例方法的对象7.2.3实例属性和实例方法150实例方法的定义与调用classCircle:def__init__(self,r,

line_color=default_line_color,fill_color=default_fill_color):self.r=rself.line_color=line_colorself.fill_color=fill_color

defdraw(self):print(f'绘制圆:半径{self.r},线条{self.line_color},填充{self.fill_color}')c1=Circle(2.0,'红色','黄色')c1.draw()示例7-57.2.4静态方法150静态方法逻辑上功能和类相关放在类中更合适通过“类名.静态方法()”调用class类名:@staticmethoddef方法名(参数列表)#函数体使用装饰器@staticmethod7.2.4静态方法151静态方法的定义和调用classCircle:pi=3.14159@staticmethoddefcalc_area(r):returnr**2*Circle.piprint(Circle.calc_area(2.0))示例7-6Python类与对象01020403封装继承多态目

录封装020403继承多态目

录Python类与对象01Python实现封装@property7.3封装151封装:信息隐藏只对外提供必要的属性和方法,提高代码安全性外部不关心对象内部的实现细节,简化编程过程访问控制私有保护公有可以公开:名字受保护的:财产绝对不能公开:秘密7.3.1Python实现封装151Python没有明确的访问控制符保护属性或方法:单下划线“_”开始,规范上约定不能直接使用(用了也不会报错)私有属性或方法:双下划线“__”开始,语法上不能直接使用(用了会报错)classDemo1:def__init__(self):self.__private_data=0

def__private_method(self):print('一个前置双下划线命名的私有方法')示例7-77.3.1Python实现封装151classCircle:definfo(self):print(self.__private_data)self.__private_method()d1=Demo1()print(d1.__private_data)#报错:AttributeErrord1.__private_method()#报错:AttributeError

print(d1._Demo1__private_data)d1._Demo1__private_method()示例7-77.3.1Python实现封装152前置单下划线命名保护的属性和方法classDemo2:def__init__(self):self._protected_data=0def_protected_method(self):print('一个前置单下划线命名的保护方法')definfo(self):print(self._protected_data)self._protected_method()d2=Demo2()print(d2._protected_data)d2._protected_method()示例7-87.3.2@property152通过实例方法get_r()和set_r()读写半径classCircle:def__init__(self):self.__r=Nonedefget_r(self):returnself.__rdefset_r(self,r):if(isinstance(r,int)orisinstance(r,float))andr>0:self.__r=relse:print('r必须是大于0的整数或浮点数.')示例7-97.3.2@property152通过实例方法get_r()和set_r()读写半径@property:定义对象属性访问器将一个实例方法伪装成实例属性简洁代码c1=Circle()c1.set_r(2.0)print(c1.get_r())#打印结果:2.0示例7-97.3.2@property153@property定义只读属性fromdatetimeimportdateclassPerson:def__init__(self,name,born):=nameself.born=born示例7-107.3.2@property153@property定义只读属性

@propertydefage(self):today=date.today()birthday=self.born.replace(year=today.year)ifbirthday>today:returntoday.year-self.born.year-1else:returntoday.year-self.born.yearp1=Person('',date(1990,5,15))print(p1.age)#打印结果:33示例7-107.3.2@property153@property定义读/写属性classCircle:def__init__(self):self.__r=None@propertydefr(self):returnself.__r示例7-117.3.2@property153@property定义读/写属性

@r.setterdefr(self,r):if(isinstance(r,int)orisinstance(r,float))andr>0:self.__r=relse:print('r必须是大于0的整数或浮点数.')c1=Circle()c1.r=2.0print(c1.r)#打印结果:2.0示例7-11Python类与对象01020403封装继承多态目

录继承0304多态目

录Python类与对象0102封装代码复用扩展新特性7.4.1代码复用161继承:从已有的类派生新的子类,子类完全继承父类的公有属性和公有方法实现代码复用,减少类之间代码冗余子类添加新属性/方法,灵活扩展生命值攻击值派生成长等级escape()派生攻击倾向Spirit类Pet类Monster类7.4.1代码复用继承语法class子类名(父类名):#子类实现7.4.1代码复用161Spirit类派生子类Pet和MonsterclassSpirit:def__init__(self,life=100,aggro=False):self.life=lifeself.current_life=lifeself.aggro=aggrodefis_live(self):returnFalseifself.current_life<=0elseTruedefis_aggro(self):returnself.aggro示例7-127.4.1代码复用161Spirit类派生子类Pet和MonsterclassPet(Spirit):passclassMonster(Spirit):passp1=Pet(100,True)#调用父类的__init__()m1=Monster(400,False)#调用父类的__init__()print(p1.life,p1.current_life,p1.aggro)print(m1.life,m1.current_life,m1.aggro)示例7-127.4.2扩展新特性161扩展新特性class子类名(父类名)子类类属性=值def__init__(self,参数列表):

#初始化继承的实例属性super().__init__(参数列表)

self.子类实例属性=值super():内置函数,用于调用父类的方法,此处调用确保父类中的初始化代码正确执行子类__init__()方法的参数列表常常要包含父类初始化所需的参数7.4.2扩展新特性162子类Monster添加新方法classMonster(Spirit):def__init__(self,life=100,aggro=False,exp=200):super().__init__(life,aggro)self.exp=expdefescape(self):p=random.randint(1,100)ifp<=40:print('逃跑成功!')self.current_life=self.lifeelse:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论