




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Python程序设计——从入门到数据分析PYTHON模块与类第六章6.1类的含义6.2类的对象6.3类的属性6.4类中的方法6.5成员与方法的私有化6.6继承6.7多态6.8实例类6.1格式:class类名: def方法名(self,参数列表): pass
有相似性质,执行相同操作的对象,被视为同一类对象。类是对同一类对象的集合与抽象。“类”是用来描述具有相同属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。6.2类的对象对象变量名=类名(参数列表)格式:
类是创建对象的模板,对象则是类的一个实例,如学号为“2020001”的学生是学生类的实例。【例6.1】定义Student类,并生成实例化对象,对象名为stu1,并访问成员方法info()。6.3属性类属性:创建类时,用变量形式表示的对象属性称为数据成员。在类中,所有方法之外定义的数据成员称为类属性。类属性作用域在整个类内有效,类属性用类名或对象名访问。实例属性:构造函数(__init__)是类中的一个特殊方法,该方法在类实例化时会自动调用,它的作用是初始化。实例属性是在构造函数(__init__)中定义的,定义和使用必须以self为前缀。实例属性在类的内部用self访问,在类的外部用对象名访问。类属性:在类中所有方法之外定义的数据成员;类名访问(或对象名访问)实例属性:在构造函数(__init__)中定义的,定义和使用必须以self为前缀。实例属性在类的内部用self访问,在类的外部用对象名访问。6.3属性2000请叫我:小信206.4类中的方法成员:是什么方法:能做什么类的特征类的特征:一个类家族中所有成员(还有它的子类)共同的特点。1.实例方法2.静态方法3.类方法实例方法的第一个参数一般为self。调用时,Python自动把对象实例传递给该参数。35自动把对象实例obj1传递给self参数1.实例方法6.46.42.静态方法静态方法:Python允许声明与对象实例无关的方法(不需要self参数)。调用时,用“类名.静态方法名()”的形式。一般静态方法使用@staticmethod装饰器声明,实例对象和类对象都可以调用。静态方法中不能使用类或实例的任何属性和方法。6.13.类方法
类方法传入的第一个参数是当前类对象,参数名一般约定为cls,通过cls传递类的属性和方法。类方法可以通过类对象和实例对象调用,类方法一般使用@classmethod装饰器声明。成员与方法的私有化6.5【例6.3】创建一个类,访问类的成员。1.成员的私有化
通常,封装性是指一个对象的成员属性要得到一定程度的保护。例如:对一个对象的成员属性进行修改或访问,需要通过对象允许的方法进行,比如要求输入密码以确认是否拥有此权限等。这样可以保护对象,使程序不易出错。成员与方法的私有化6.51.成员的私有化Python没有严格意义上的封装性。成员与方法的私有化6.52.方法的私有化6.6继承任何父类中的方法在子类中都可以用【例6.4】
创建三个类Animals、Mammals和Pandas,按照下图在每个类中定义方法,生成Pandas类的实例对象,并访问父类move()方法。MikeSounders著,姚军译.Python趣味编程入门.北京:人民邮电出版社,2018.6.7多态性多态性是指具有不同功能的函数可以使用相同的函数名,即可用一个函数名调用不同内容的函数。【例6.5】创建一个父类与两个子类,并重写父类。classBird:defbehavior(self,action):print("Abirdcan",format(action))classSwallow(Bird):defbehavior(self,action):print("Aswallowcan",format(action))classCrow(Bird):defbehavior(self,action):print("Acrowcan",format(action))b=Bird()b.behavior("fly")s=Swallow()s.behavior("fly")c=Crow()c.behavior("fly")6.8包和模块的关系一个“.py”文件可被看作是一个模块,其中包含用户定义的函数、变量、类和其他导入的模块,多个模块可以组成一个包。包是一个包含__init__.py文件的目录,一个“包”下有一个__init__.py文件和一个或多个模块。实例1:熊猫吃竹子6.9知识点类和对象属性和方法父类与子类的继承关系实例化对象:self__init()__:初始化参考文献:JasonBriggs著,尹哲译.趣学Python编程[M].人民邮电出版社,2014.6.9知识点回顾类和对象属性和方法实例化对象:self__init()__:初始化父类与子类的继承关系(1)实例属性:在构造方法(__init__)中定义的,定义和使用是以self为前缀。实例属性在类的内部用self访问,在类的外部用对象名访问。(2)参数self:实例方法的第一个参数一般为self。调用时,Python自动把对象实例传递给该参数。实例2:学生信息管理实例2:学生信息管理6.9要求:输入菜单选项,实现对学生信息的管理,包括显示、添加、
删除、查找与保存功能。输入1:显示输入2:添加输入3:删除输入4:查找输入5:保存程序要点1.定义Student类对象属性:name、num方法:def__init__():初始化,构造方法(__init__)在类实例化时会自动调用。deffind()方法
:查找,例如:如果搜索的姓名在学生数据中存在,该方法返回1,否则返回0。show()方法:显示,用于显示学生信息。2.定义函数file_load():文件加载file_save():文件保存3.其他知识点append():添加del:删除pickle()try…except6.91.定义Student类6.91.定义Student类对象属性:name、num方法:def__init__():初始化。deffind()方法
:查找show()方法:显示。2.定义函数6.9知识点回顾异常处理:try…except语句2.定义函数6.9实例:学生信息管理6.9%cd
d:/%runtest.py#运行结果为1#说明有1个参数,脚本本身test.py实例:学生信息管理6.9思政案例Python程序设计——从入门到数据分析PYTHON字符串基本操作与正则表达式7.1字符串的常用方法7.2字符串格式化输出7.3正则表达式7.4实例:网页数据解析及输出第七章学习目标第七章(1)掌握字符串的内置函数和字符串方法。(2)掌握字符串格式化输出方法。(3)理解正则表达式的基础语法,掌握re库的使用。字符串的常用方法第七章7.1序号方法描述1split('',num)通过指定分隔符对字符串进行拆分,并返回分割后的字符串列表。2join(seq)以指定字符串作为分隔符,将seq中所有的元素合并为一个新的字符串。3strip([chars])移除字符串头尾指定的字符(默认为空格或换行符等)或字符序列(即chars表示的字符序列)。4count(str,beg=0,end=len(string))返回str在string里面出现的次数,如果beg或者end指定则返回指定范围内str出现的次数,默认为搜索整个字符串。5startswith(substr,beg=0,end=len(string))检查字符串是不是以指定子字符串substr开头,是则返回True,否则返回False。如果使用beg和end参数指定值,则在指定范围内检查。6endswith(suffix,beg=0,end=len(string))检查字符串是否以suffix结束,在beg或者end指定范围内是否以suffix结束,如果是,返回True,否则返回False。7replace(old,new[,max])将字符串中的old替换成new,如果max指定,则替换不超过max次。表7.1字符串常用方法字符串的常用方法第七章7.1(1)字符串拆分:split()。split()方法通过指定分隔符对字符串进行拆分,并返回分割后的字符串列表,其语法格式为:string.split(str,num)string表示待拆分的字符串或字符串变量;str表示分隔符,默认为空格,但是不能为空('')。若字符串中没有分隔符,则把整个字符串作为列表的一个元素;num表示分割次数。如果存在参数num,则仅分隔成num+1个子字符串。字符串的常用方法第七章7.1【例7.1】字符串的拆分。['I','love','apple']['I','loveBISTU']#运行结果字符串的常用方法第七章7.1(2)字符串的连接:join()。join()方法可以连接字符串序列,将字符串、元组以及列表中的元素以指定的字符(分隔符)进行连接,返回值为一个以分隔符连接各个元素后生成的新字符串,其语法格式为:'sep'.join(seq)sep表示分隔符,可以为空。seq表示要连接的元素序列、字符串、元组、字典;如果连接的序列为字典,则连接字典的键,输出结果是所有键组成的字符串。字符串的常用方法第七章7.1【例7.2】字符串的连接。'Chinese;English;Math'#运行结果字符串的常用方法第七章7.1(3)去除字符串首尾的字符:strip()。在数据分析时,经常会遇到数据有多余的空格、换行等字符,strip()方法可以移除字符串头尾指定的字符或字符序列。返回值为去除首尾字符的字符串。其语法格式为:string.strip(chars)string表示字符串或字符串变量。chars为可选参数,表示要移除的字符,默认为移除空格、换行符“\n”、回车“\r”、制表符“\t”。字符串的常用方法第七章7.1'<课程介绍>''课程介绍'【例7.3】strip()方法的使用。#运行结果字符串的常用方法第七章7.1(4)统计字符次数:count()。count()方法用于统计字符串里字符出现的次数,返回值为字符出现的次数。其语法格式为:string.count(chars,start,end)chars表示要统计出现次数的字符或字符串。start表示字符串开始搜索的位置,可选参数,默认为第一个字符,第一个字符索引值为0。end表示字符串中结束搜索的位置,可选参数,默认为字符串的最后一个位置。字符串的常用方法第七章7.1
3【例7.4】count()方法的使用。#运行结果字符串的常用方法第七章7.1(5)检查字符串的开头和结尾:startswith()和endswith()。startswith()方法检查字符串是否以指定字符串开头,是则返回True,否则返回False。string.startswith(str,beg,end)string表示要检查的字符串或字符串变量;str表示指定的字符串,检查是否以str开始;beg表示开始搜索的位置,可选参数,默认为第一个字符,第一个字符索引值为0。end表示结束搜索的位置,可选参数,默认为字符串的最后一个位置。字符串的常用方法第七章7.1True【例7.5】startswith()方法。#运行结果字符串的常用方法第七章7.1endswith()方法用于判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回True,否则返回False。其语法格式为:string.endswith(str,beg,end)参数string,str,beg,end参数含义与startswith()方法相同。字符串的常用方法第七章7.1False【例7.6】endswith()方法的使用。#运行结果字符串的常用方法第七章7.1(6)替换字符串中的字符:replace()。replace()方法把字符串中的旧字符串替换成新字符串,返回值为替换后的新字符串。其语法格式为:string.replace(old,new,max)string表示原字符串;old表示将被替换的子字符串;new表示新字符串,用于替换old子字符串;max表示可选字符串,替换不超过max次。字符串的常用方法第七章7.1这是旧字符串这是新字符串【例7.7】字符串replace()方法。#运行结果字符串格式化输出第七章7.2在Python3.6之前,常用的字符串格式化方法主要有“%”和str.format()两种。首先,介绍一下“%”格式化操作,字符串对象有一个内建操作符%,可以用于格式化操作,具体的使用方法如例7.8所示。字符串格式化输出第七章7.2【例7.8】“%”格式化操作。示例一:'Hello,John.'#运行结果示例二:'Hello,John.Heis18.'#运行结果字符串格式化输出第七章7.2str.format()是字符串格式化方法中的一种,其基本使用格式为:<模板字符串>.format(<逗号分隔的参数>),模板字符串包含一系列槽,用来控制传入参数的位置和格式,因此模板字符串中的槽除了包括参数序号,还包括格式控制信息。槽的内部样式如下:{<参数序号>:<格式控制标记>}。当参数序号省略时,则按顺序传入参数。
字符串格式化输出第七章7.2格式控制标记用于控制参数显示时的格式。格式控制标记包括:<填充>、<对齐>、<宽度>、<,>、<.精度>和<类型>6个字段,这些字段都是可选的,可以组合使用。表7.2为常用格式控制标记。
:<填充><对齐><宽度>,<.精度><类型>引导符号用于填充的单个字符<左对齐>右对齐^居中对齐槽的设定输出宽度数字的千位分隔符,适用于整数和浮点数浮点数小数部分的精度或字符串的最大输出长度整数类型:b,c,d,o,x,X浮点数类型:e,E,f,%表7.2常用格式控制标记<填充>、<对齐>、<宽度>、<,>、<.精度>和<类型>6个字段
字符串格式化输出第七章7.2中国********有1,300,000,000人口,用占世界7.2%的土地,养活了世界20.000%的人口【例7.9】字符串格式化输出的format()方式。槽位中参数序号从0开始,0、1、2、3代表与format()中字符串的对应关系,如序号0与1300000000对应;序号1与“中国”对应。{1:*<10}中,10表示输出数据的宽度,如果输出的数据宽度小于10,则用“*”号填充;{2:.1%}对应输出的是0.072的百分数形式,保留1位小数。{3:.3%}是输出0.20000的对应百分数,保留3位小数。#运行结果字符串格式化输出第七章7.2在Python3.6之后版本添加的f-string,称之为字面量格式化字符串,亦称为格式化字符串常量(Formattedstringliterals),f-string在形式上是以f或F修饰符引导的字符串(f'xxx'或F'xxx'),以大括号{}标明被替换的字段;f-string在本质上并不是字符串常量,而是一个在运行时运算求值的表达式。【例7.10】字符串格式化输出的f-string方式。#运行结果Lilyis18yearsold字符串格式化输出第七章7.2可以对传入变量值进行格式化,格式化符号与format()方法一致。【例7.11】f-string方式的变量值格式化。#运行结果Lilyis18.23yearsold字符串格式化输出第七章7.2f-string格式化也支持字典键值传入,传入值时以
dictionary['key']的形式传入,其中dictionary表示字典变量名称,key表示字典dictionary中的键。
【例7.12】f-string方式的字典键值传入。#运行结果Lilyis18yearsoldLilyis18.00yearsold字符串格式化输出第七章7.2字符串里常常存在一些如换行“\n”、制表符“\t”等带有反斜杠“\”的特殊含义的字符,这些字符被称为转义字符。Python中常见的转义字符见表7.3。
转义字符描述\(在行尾时)续行符\\反斜杠符号\'单引号\"双引号\a响铃\b退格\e转义\000空\n换行\v纵向制表符\t横向制表符\r回车\f换页\oyy八进制数,yy代表的字符,例如:\o12代表换行\xyy十六进制数,yy代表的字符,例如:\x0a代表换行\other其他的字符以普通格式输出字符串格式化输出第七章7.2【例7.13】转义字符的输出。如果转义字符不需要转义,则可以采取在字符串前端引号外加'r'的方式实现,或者使用双反斜杠(\\)。
【例7.14】转义字符不需要转义的格式化输出。#运行结果人生苦短请用Python#运行结果人生苦短\n请用Python人生苦短\n请用Python正则表达式第七章7.3正则表达式(RegularExpression)能够灵活搜索或匹配字符串模式,是一种特殊的字符序列,即特殊的字符串。设计思想是用描述性的语言来给字符串定义规则,凡是符合规则的字符串,就认为它“匹配”了,否则,就认为该字符串“不匹配”。元字符第七章7.3.1正则表达式中既可以包含普通字符,也可以包含元字符,元字符用来指定匹配模式。在应用正则表达式进行匹配时,正则表达式中的普通字符需要做精确匹配,而元字符指定的匹配模式对应了匹配规则。例如:普通字符'a'只匹配字符串中的'a',元字符'.'则可以匹配任意字符。Re常用的元字符有“.、^、$、*、+、?、\、|、{}、[]、()”等,表7.4列出了Python正则表达式构建中常用的元字符。正则表达式第七章7.3表7.4Python正则表达式的元字符元字符说明举例.代表任意字符a..b可以匹配以'a'开始以'b'结束的四个字符组成的字符串|逻辑或操作符asdf|bkm可以匹配字符串asdf或bkm[]字符集[abc]表示字符'a'、'b'、'c'。[a-z]表示'a'到'z'的任意单个字符-定义一个区间1-5表示1,2,3,4,5*前一个字符0次或多次重复abc*表示ab,abc,abcc,abccc,abccccc等+前一个字符一次或多次重复abc+表示abc,abcc,abccc等?前一个字符0次或1次重复abc?表示ab和abc[^]对字符集合取非[^abc]表示不是a、b、c的其他单个字符正则表达式第七章7.3表7.4Python正则表达式的元字符(续)元字符说明举例{n}扩展前一个字符n次ab{2}c表示abbc{m,n}扩展前一个字符m至n次(含n次)ab{2,4}c表示abbc,abbbc,abbbbc{n,}至少匹配n次
x{n,}:匹配至少n次x^匹配字符串的开头^abc表示abc且在一个字符串的开头$匹配字符串的结尾abc$表示abc在一个字符串的结尾()分组标记,内部用|分组(abc|xyz)表示abc、xyz正则表达式第七章7.3除了以上元字符,Python正则表达式还提供了特殊序列表示特殊的含义,特殊序列由反斜杠(“\”)和一个字符组成。表7.5列出了常见的特殊序列。特殊序列代表的匹配字符\s与所有空白字符匹配,等价于[\t\v\n\f\r]\S与所有非空白字符匹配,等价于[^\t\v\n\f\r]\d等同于[0-9]\D等同于[^0-9]匹配非数字\w等同于[a-z0-9A-Z_]匹配大小写字母、数字和下划线\W等同于[^a-z0-9A-Z_],等同于上一条取反表7.5Python正则表达式常见的特殊序列正则表达式的常见用法,例如:描述北京常规的固话号码:'(010-)?[2-9][0-9]{7}'表示可选010前缀,2-9开头。描述IP地址的简单正则表达式:\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}。描述Email的简单正则表达式:[0-9a-zA-Z.]+@[0-9a-zA-Z.]+?com。Re模块第七章7.3.2re模块提供了正则表达式匹配操作,将正则表达式的样式编译为一个正则表达式对象,可以用于匹配。正则表达式也是字符串,re库中的compile()函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象,该对象拥有一系列方法用于正则表达式匹配和替换Re模块第七章7.3.2【例7.15】pile()的用法。#运行结果re.PatternRe模块第七章7.3.2生成的正则表达式对象可以用于查找匹配的字符串、字符串的替换及拆分等。(1)查找匹配的字符串。正则表达式对象用于查找匹配字符串的方法主要有:search()、findall()、finditer()、match()以及fullmatch()。search()函数扫描整个字符串进行模式匹配且为贪婪匹配(最大的模式匹配),如果找到第一个匹配的位置,则返回一个MatchObject对象,存储匹配位置、匹配内容等信息。例如:电商平台的商品评价中,要查找对相机质量的评价。Re模块第七章7.3.2【例7.16】查找匹配字符串的search()方法。<re.Matchobject;span=(6,19),match='画质好,但是夜景模式画质差'>#运行结果<re.Matchobject;span=(6,9),match='画质好'>#运行结果下面代码首先生成正则表达式对象pattern,正则表达式对象调用其方法search()查找匹配的字符串。search()方法默认为贪婪匹配,即寻找最大的模式匹配。“.*”表示匹配除换行符外的0个或任意多个字符,采用{,n}限制间隔的字数。Re模块第七章7.3.2【例7.17】查找匹配字符串的findall()方法。search()是寻找从左到右第一个与正则表达式匹配,而不是找到所有匹配,贪婪匹配是查找到第一个最大的匹配项。如果要获取所有匹配,可以采用findall()方法,返回结果是匹配的列表。search()和findall()方法均为贪婪匹配,即匹配最大/长的项。为了避免错误,可以在设计正则表达式时限定字符数量。['画质好','画质差']['画质好,但是夜景模式画质差']#运行结果#运行结果Re模块第七章7.3.2finditer()函数与findall()函数的作用基本是一样的,区别在于findall()函数返回的是列表,finditer()函数返回的是迭代器,迭代器用完之后可以自动释放内存。在处理的数据较大时,finditer()非常有用,可以节省内存空间。【例7.18】查找匹配字符串的finditer()方法#运行结果<re.Matchobject;span=(6,9),match='画质好'><re.Matchobject;span=(16,19),match='画质差'>Re模块第七章7.3.2search()函数和findall()函数匹配任意位置的模式,match()函数的不同之处在于只匹配出现在字符串开头的模式,即如果符合正则表达式的模式如果出现在字符串的开头,match()函数会返回MatchObject对象,如果出现在中间位置或无匹配模式,则返回None。match()函数也是贪婪的。它显然不存在匹配第一个还是多个这样的问题,因为从头开始的贪婪匹配显然只能有一种结果。【例7.19】查找匹配字符串的match()方法。<re.Matchobject;span=(0,13),match='画质好,但是夜景模式画质差'>#运行结果NoneType#运行结果Re模块第七章7.3.2match()只从字符串的开头匹配,fullmatch()用于检测pattern是从头到尾匹配。查看例7.20的结果【例7.20】查找匹配字符串的fullmatch()方法。NoneType#运行结果#运行结果<re.Matchobject;span=(0,20),match='画质好,但是这款夜间模式时不清晰,画质差'>Re模块第七章7.3.2(2)字符串的拆分。字符串的split()方法能够实现对字符串的拆分,一般是基于默认或指定的分隔符进行拆分。利用正则表达式可以更加灵活地对字符串进行拆分,满足正则表达式的匹配项都可以作为分隔符,下面通过例题了解re模块中拆分字符串的split()方法的使用。【例7.21】字符串拆分的split()方法。['小明','男','信管2001计算机']#运行结果['小明','男','信管2001','计算机']#运行结果Re模块第七章7.3.2(3)字符串的替换。re模块中用于字符串替换的函数有sub()和subn(),两个函数用法基本相同,返回值不同。sub()函数返回替换后的结果(仍是字符串),subn()返回元组,元组的元素是替换后的字符串和替换的次数。例7.22】字符串替换的sub()方法。
#运行结果这个西红柿可以做西红柿炒鸡蛋。这个西红柿可以做柿子炒鸡蛋。('这个西红柿可以做西红柿炒鸡蛋。',2)Re模块第七章7.3.2(4)re库使用模式。前面在使用re模块中的函数时,先将正则表达式字符串生成正则表达式对象,然后用正则表达式对象调用各个方法,这种操作适合数据量较大时,因为正则表达式对象可以重复使用。【例7.23】re库的使用一。#运行结果'跑起来吧,青年!我校“校园健康跑”活动启动。'('跑起来吧,青年!我校“校园健康跑”活动启动。',4)Re模块第七章7.3.2在数据量较少时,不生成正则表达式对象,直接使用re模块的各个函数是一种简便的操作。例7.24中re.search()使用时,re模块直接使用search()函数,不生成正则表达式对象,一般第1个参数为正则表达式字符串,第2参数为目标字符串。【例7.24】re库的使用二,请运行下列代码查看结果。<re.Matchobject;span=(2,16),match='画质好,但是夜间模式时画质差'>['画质好','画质差']['小明','男','信管2001','计算机']#运行结果实例:网页数据解析及输出第七章74实际应用中,经常采用正则表达式结合字符串方法处理网页数据,本节实例展示了网页数据处理的基本过程。首先,通过设计合理的正则表达式提取网页中的内容;然后,选择合适的Python数据类型存储提取的内容,一般选择列表或字典。图7.1展示了本实例中网页片段内容,图7.2展示了该页面对应的HTML代码。图7.1课程列表网页片段图7.2课程列表网页片段html源代码第七章【例7.25】正则表达式使用案例。实例:网页数据解析及输出74第七章例7.25】运行结果运行结果最后,输出课程数据,代码如下:实例:网页数据解析及输出74{'浙江大学':'哲学问题','耶鲁大学':'心理学导论','武汉大学':'中国文化概论','厦门大学':'创业投资','北京大学':'古代汉语','南京大学':'唐宋文学'}浙江大学所讲课程为:哲学问题耶鲁大学所讲课程为:心理学导论武汉大学所讲课程为:中国文化概论厦门大学所讲课程为:创业投资北京大学所讲课程为:古代汉语南京大学所讲课程为:唐宋文学小结第七章(1)掌握字符串的内置函数和字符串方法,如join()、strip()、count()、startswith()、endswith()、replace()等(2)掌握字符串格式化输出方法,如%、format()、f-string、转义字符等方法(3)理解正则表达式的基础语法,掌握re库的使用。思政案例Python程序设计——从入门到数据分析PYTHON文件读写8.1文件读写8.2CSV文件读写8.3JSON库第八章8.4实例学习目标第八章(1)掌握open()函数打开文件的方法。(2)掌握文件读写方法。(3)掌握CSV模块读写文件的方法。(4)了解JSON库读写JSON数据的使用方法文件读写——文件打开/关闭第八章8.1open()函数的基本语法为:f=open(filename,mode)其中:filename代表文件路径的字符串;mode代表打开模式;f代表文件对象变量。open()函数提供了7种打开模式,见表8.1。文件读写第八章8.1打开模式含义'r'只读模式,如果文件不存在,返回异常FileNotFoundError,默认值'w'覆盖写模式,文件不存在则创建,存在则完全覆盖源文件'x'创建写模式,文件不存在则创建,存在则返回异常FileExistsError'a'追加写模式,文件不存在则创建,存在则在原文件最后追加内容'b'二进制文件模式,配合a/r/w使用't'文本文件模式,默认值'+'与r/w/x/a一同使用,在原功能基础上增加同时读写功能(r+模式默认为覆盖读写)表8.1open()函数的7种打开模式文件读写第八章8.1使用open()函数打开文件并完成读/写操作后,需要将文件关闭,否则文件会一直被Python进程占用,而不能被其他进程使用。关闭文件的方法为close(),关闭方式为文件对象调用该方法。例8.1为文件打开与关闭示例代码。【例8.1】文件打开与关闭。运行结果文件是否关闭?False文件是否关闭?True文件读写第八章8.1文件对象的closed属性判断当前的文件状态,如果文件对象的closed属性值为True,表明文件为关闭状态,否则为打开状态。也可以使用with语句,with语句在文件操作完后自动关闭文件,见例8.2。【例8.2】with语句的使用。运行结果文件是否关闭?True文件读写第八章8.1打开文件后,对文件的操作主要有“读”和“写”2种。“读”表示从打开的文件中读取内容;“写”表示向文件中写入内容。表8.2为Python常用的3种读文件内容的方法,其中f为文件对象变量。表8.2Python中的3个读文件方法方法含义f.read(size)从文件中读入整个文件内容,如果给出参数,读入前size长度的字符串或字节流f.readline(size)从文件中读入一行内容,如果给出参数,读入该行前size长度的字符串或字节流f.readlines()从文件中读入所有行,以每行为元素形成一个列表文件读写第八章8.1下面以鸢尾花数据(/ml/datasets/Iris)为例进行文件读写操作,表8.3为部分鸢尾花数据示例。IDSepallengthSepalwidthPetallengthPetalwidthSpecies15.13.51.40.2Iris-setosa24.931.40.2Iris-setosa34.73.21.30.2Iris-setosa44.63.11.50.2Iris-setosa553.61.40.2Iris-setosa表8.3鸢尾花数据示例文件读写第八章8.1运行结果【例8.3】文件内容读取(read()方法读取鸢尾花数据)。'ID,Sepallength,Sepalwidth,Petallength,Petalwidth,Species\n1,5.1,3.5,1.4,0.2,Iris-setosa\n2,4.9,3,1.4,0.2,Iris-setosa\n3,4.7,3.2,1.3,0.2,Iris-setosa\n4,4.6,3.1,1.5,0.2,Iris-setosa\n5,5,3.6,1.4,0.2,Iris-setosa'
文件读写第八章8.1
读取结果为所有数据形成的字符串,包括换行符'\n',并且此时文件读/写位置移动到文件结尾,可以采用seek()方法移动文件读/写位置,其基本语法格式为:f.seek(offset[,whence])
其中:f代表文件对象变量;offset代表偏移量,也就需要移动偏移的字节数;whence:可选,默认值为0,表示要从哪个位置开始偏移,0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。文件读写第八章8.1【例8.4】seek()方法使用。由于【例8.3】读完整个文件,此时文件读/写位置指向文件结尾,因此语句f.read(8)读入内容为空;f.seek(0)表示文件读/写位置从文件开头偏移0个字节,因此文件读/写位置移动到文件开始位置。''0'ID,'运行结果运行结果运行结果文件读写第八章8.1【例8.5】readline()和readlines()方法读取数据。readlines()读取从读/写位置开始的所有数据,结果为列表,原数据的一行为列表的一个元素,且元素类型为字符串。['1,5.1,3.5,1.4,0.2,Iris-setosa\n','2,4.9,3,1.4,0.2,Iris-setosa\n','3,4.7,3.2,1.3,0.2,Iris-setosa\n','4,4.6,3.1,1.5,0.2,Iris-setosa\n','5,5,3.6,1.4,0.2,Iris-setosa']'ID,Sepallength,Sepalwidth,Petallength,Petalwidth,Species\n'#运行结果#运行结果文件读写第八章8.1“写”表示向打开的文件中写入内容,Python常用的写数据方法为write()和writelines(),具体含义见表8.4,其中f为文件对象。向文件写入数据时,需要以能写的模式打开文件,如'w','x','a','r+'等。
函数含义f.write(s)向文件写入一个字符串或字节流,s为要写入的字符串或字节流f.writelines(lines)将元素为字符串的列表lines写入文件表8.4Python的2个写文件方法文件读写第八章8.1例8.6为write()方法的使用,当以“a+”模式打开文件后,文件读/写位置在文件结尾,因此当向文件写入数据时,直接在原有文件内容后附加写入的内容,返回值为写入的字符个数。此时文件读/写位置移动到文件结尾,为了查看写入的内容,采用seek()方法移动读/写位置至文件开头,然后调用readlines()方法读取文件内容,最后关闭文件。例8.6】向文件写内容的write()方法。9#运行结果#返回值为写入的字符个数文件读写第八章8.1例8.7为writelines()方法的应用,与write()方法不同的是,writelines()方法写入的内容是字符串组成的列表。【例8.7】向文件写内容的writelines()方法。['ID,Sepallength,Sepalwidth,Petallength,Petalwidth,Species\n','1,5.1,3.5,1.4,0.2,Iris-setosa\n','2,4.9,3,1.4,0.2,Iris-setosa\n','3,4.7,3.2,1.3,0.2,Iris-setosa\n','4,4.6,3.1,1.5,0.2,Iris-setosa\n','5,5,3.6,1.4,0.2,Iris-setosa\n','北京\n','上海\n','广州\n','深圳']
运行结果CSV文件读写第八章8.2逗号分隔值
(CSV,Comma-SparatedValues)文件是一种国际通用的一维、二维数据存储格式。数据的各个元素之间一般用英文半角逗号分隔,扩展名为.csv。公开数据集鸢尾花数据即为csv格式,如图8.1所示。图8.1鸢尾花数据的csv格式CSV文件读写第八章8.2Python提供了csv模块用于csv文件的读写操作,使用时需要事先导入csv库,即importcsv。表8.5列出了csv模块读写文件时的常用方法。方法含义csv.reader()读操作,返回一个reader对象csv.writer()写操作,返回一个writer对象w.writerow()逐行写入w.writerows()同时写入多行表8.5csv模块读写文件方法表中csv表示csv模块的名称,w表示writer()方法返回的writer对象。CSV文件读写第八章8.2读取文件内容时,如前所述先打开文件,然后采用csv模块的reader()方法创建reader对象,如例8.8中的r即为reader对象。【例8.8】csv方法读文件。[['ID','Sepallength','Sepalwidth','Petallength','Petalwidth','Species'],['1','5.1','3.5','1.4','0.2','Iris-setosa'],['2','4.9','3','1.4','0.2','Iris-setosa'],['3','4.7','3.2','1.3','0.2','Iris-setosa'],['4','4.6','3.1','1.5','0.2','Iris-setosa'],['5','5','3.6','1.4','0.2','Iris-setosa']]可以看出,reader对象为可迭代对象,本例中采用列表推导式遍历reader对象r并以列表形式存储。运行结果CSV文件读写第八章8.2csv模块在写数据时,先创建writer对象,然后由writer对象调用writerow()或writerows()方法写入数据。例8.9为writerow()方法的用法。【例8.9】csv写文件writerow()方法。['ID,Sepallength,Sepalwidth,Petallength,Petalwidth,Species\n','1,5.1,3.5,1.4,0.2,Iris-setosa\n','2,4.9,3,1.4,0.2,Iris-setosa\n','3,4.7,3.2,1.3,0.2,Iris-setosa\n','4,4.6,3.1,1.5,0.2,Iris-setosa\n','5,5,3.6,1.4,0.2,Iris-setosa\n','a,b,c,d\n','aa,bb,cc,dd\n']运行结果CSV文件读写第八章8.2【例8.10】csv写文件writerows()方法。['ID,Sepallength,Sepalwidth,Petallength,Petalwidth,Species\n','1,5.1,3.5,1.4,0.2,Iris-setosa\n','2,4.9,3,1.4,0.2,Iris-setosa\n','3,4.7,3.2,1.3,0.2,Iris-setosa\n','4,4.6,3.1,1.5,0.2,Iris-setosa\n','5,5,3.6,1.4,0.2,Iris-setosaa,b,c,d\n','aa,bb,cc,dd\n']运行结果JSON库第八章8.3JSON(JavascriptObjectNotation)格式可以对高维数据进行表达和存储,是一种轻量级的数据交换格式。JSON格式以键值对方式存储数据,键和值分别用双引号标记(值为数字时可不用标记),并且键值之间以冒号间隔,如:"key":"value"。JSON格式有如下规则:(1)数据保存在键值对中。(2)键值对之间由逗号分隔。(3)大括号保存键值对组成的对象。(4)中括号保存对象组成的数组,对象之间由逗号分隔。JSON格式如下例子所示:"课程介绍":[{"课程名称":"Python程序设计","理论学时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 船舶租赁与运营合同
- 个人车位出租合同协议
- 个人无抵押借款合同
- 承接前期物业管理服务合同
- 土建工程承包合同范
- 广西电力职业技术学院《中小学美术教学设计与案例分析》2023-2024学年第二学期期末试卷
- 5、《平行与垂直》(教学设计)-2024-2025学年四年级上册数学人教版
- 汉中职业技术学院《图形图像软件》2023-2024学年第二学期期末试卷
- 苏州卫生职业技术学院《工程测量B》2023-2024学年第二学期期末试卷
- 广东青年职业学院《能源动力(动力工程)领域工程伦理》2023-2024学年第二学期期末试卷
- 2025年山东铁投集团招聘笔试参考题库含答案解析
- 解读《干部教育培训工作条例》
- 2024-2030年中国数控机床行业运营趋势与前景动态预测研究报告
- 心血管医疗器械白皮书
- DB31-T 1308-2021 粉尘爆炸重大事故隐患治理工程验收规范
- 精神科患者首次风险评估单
- DB36T 1689-2022 排污单位自行监测实验室管理技术规范
- 跨学科实践活动6 调查家用燃料的变迁与合理使用课件九年级化学上册(人教版2024)
- 人教版道德与法治五年级下册《第一单元 我们一家人》大单元整体教学设计2022课标
- 医嘱处理错误应急预案
- M701F4燃气轮机交流
评论
0/150
提交评论