《Python程序设计基础》课件-第7章文件及数据格式化_第1页
《Python程序设计基础》课件-第7章文件及数据格式化_第2页
《Python程序设计基础》课件-第7章文件及数据格式化_第3页
《Python程序设计基础》课件-第7章文件及数据格式化_第4页
《Python程序设计基础》课件-第7章文件及数据格式化_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

目录CONTENT010203文件的使用数据组织及处理学生成绩处理实例01文件的使用

MORETHENTEMPLATE文件概念文件是长期存储在辅助存储设备上的一段数据流,可以反复使用及修改。例如文本文件、日志文件、数据库文件、图像文件、声音文件、视频文件、可执行文件等等,这些文件都以不同的文件形式存储在各种计算机的存储设备中。浙江财经大学东方学院信息分院37.1.1文件概述

MORETHENTEMPLATE文件类型文件可以分为文本文件和二进制文件两种。文本文件一般是由具有统一字符编码的字符组成,能用文本处理程序如记事本打开。二进制文件一般没有统一的字符编码,直接由比特0和1组成,无法用记事本或其它字处理软件正常打开,因此也无法直接阅读和理解,需要正确的软件才能正常打开阅读。如可执行文件calc.exe,可以用HexEditor等十六进制编辑器打开查看和修改,但需要我们对这种类型的文件结构有深入的了解。浙江财经大学东方学院信息分院47.1.1文件概述

MORETHENTEMPLATE例7-1文本文件和二进制文件比较(1)首先,利用记事本程序生成一个文本文件7.1.txt,内容为“长风破浪会有时,直挂云帆济沧海。”,分别用文本文件方式和二进制文件方式打开该文件,观察结果。代码如下:fo=open("7.1.txt","rt")#“rt”表示以文本只读方式打开print(fo.read())fo.close()输出结果如下:长风破浪会有时,直挂云帆济沧海。浙江财经大学东方学院信息分院57.1.1文件概述

MORETHENTEMPLATE例7-1文本文件和二进制文件比较fo=open("7.1.txt","rb")#“rb”表示以二进制只读方式打开print(fo.read())fo.close()输出结果如下:b'\xb3\xa4\xb7\xe7\xc6\xc6\xc0\xcb\xbb\xe1\xd3\xd0\xca\xb1\xa3\xac\xd6\xb1\xb9\xd2\xd4\xc6\xb7\xab\xbc\xc3\xb2\xd7\xba\xa3\xa1\xa3'可以看到,文本文件以文本方式打开时,结果仍旧是可以直观阅读的文本,而文本文件以二进制方式打开时,显示的是文本文件中每个汉字的字符编码,这里是GBK的编码,如“长”这个汉字的GBK编码为b3a4,“风”的GBK编码为b7e7,一个汉字为2个字节。实际上,文本文件保存时是以字符编码形式保持的,在文本文件打开方式打开时,文件会进行解码还原汉字并显示,而以二进制方式打开时,直接显示汉字的字符编码。浙江财经大学东方学院信息分院67.1.1文件概述

MORETHENTEMPLATE例7-1文本文件和二进制文件比较(2)分别用文本文件方式和二进制文件方式打开windows附件下的计算器可执行文件calc.exe文件。代码如下:fo=open("calc.exe","rt")#以文本方式打开print(fo.read())fo.close()输出结果如下:UnicodeDecodeError:'gbk'codeccan'tdecodebyte0x90inposition2:illegalmultibytesequence可以看到,当代码用文本文件打开calc.exe文件时,会出现上面的出错信息,主要是由于calc.exe是二进制文件,不能用BGK进行解码,因此出错。浙江财经大学东方学院信息分院77.1.1文件概述

MORETHENTEMPLATE例7-1文本文件和二进制文件比较如果calc.exe用记事本程序打开,结果见图7-1,可以看到结果是乱码,因为无法正确解读二进制文件。

图7-1记事本打开的乱码文件浙江财经大学东方学院信息分院87.1.1文件概述

MORETHENTEMPLATE例7-1文本文件和二进制文件比较fo=open("calc.exe","rb")#以二进制方式打开print(fo.read())fo.close()部分输出结果如下:b'MZ\x90\x00\x03\x00\x00\x00\x04\x00\x00\x00\xff\xff\x00\x00\xb8\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x00\x00\x00浙江财经大学东方学院信息分院97.1.1文件概述

MORETHENTEMPLATE例7-1文本文件和二进制文件比较也可以用HexEditor打开时,可以看到二进制数据流,见图7-2。图7-2HexEditor打开的二进制数据流可以看到,二进制文件以二进制文件方式打开,可以正确解读,显示的是字节流,但不能以文本方式打开,打开时会出错,显示乱码。浙江财经大学东方学院信息分院107.1.1文件概述

MORETHENTEMPLATE1、

文件的打开文件在读写之前,需要先打开文件并创建文件对象,利用该文件对象对文件内容进行读写操作。读写操作完毕,需要对文件进行关闭,保存文件内容。Python通过内置的open()函数打开一个文件,并创建文件对象。open()函数的完整使用方法如下,其中很多参数都有默认参数,在调用时无需特别传递参数。<变量名>=open(file,mode="r",buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)其中,<变量名>用来保存open()函数所创建的文件对象。浙江财经大学东方学院信息分院117.1.2文件的打开和关闭

MORETHENTEMPLATE下面介绍主要的参数,含义如下。(1)file参数指定需要打开的文件名及其文件路径。文件路径可以是相对路径或者绝对路径。文件名需要指定扩展名,不指定扩展名,会抛出异常FileNotFoundError。相对路径不是完整的路径,而是指相对于当前文件夹的路径。绝对路径是完整的路径,是从硬盘的根目录(盘符)开始的路径。当前文件夹可以用如下代码获取。importosprint(os.getcwd())例如,若用上述代码获得当前路径为“E:\python教材编写\第7章案例”,则下面两条语句打开的是同一个文件。fo=open("7.1.txt","r")#相对路径fo=open("e:\\python教材编写\\第7章案例\\7.1.txt","r")#绝对路径表示都是从当前路径下打开7.1.txt文件。浙江财经大学东方学院信息分院127.1.2文件的打开和关闭

MORETHENTEMPLATE(2)mode参数指定文件的打开模式,例如,有“只读”、“只写”、“读写”等打开模式,默认打开模式为“文本只读”模式打开。浙江财经大学东方学院信息分院137.1.2文件的打开和关闭模式说明r只读模式(默认值,可以省略),如果文件不存在,则返回异常。w覆盖写模式,如果文件存在,则清空原来内容,不存在,则创建文件x创建写模式,如果文件存在,则抛出异常,不存在,则创建文件a追加写模式,如果文件存在,则在最后追加内容,不存在,则创建文件b二进制模式,但使用二进制模式打开时,不能指定encoding参数t文本模式+不单独使用,与“r”、“w”“x”“a”一起使用,表示增加读或者写功能

MORETHENTEMPLATE打开模式如果是只读,就不能写文件。打开模式是写模式(覆盖写、创建写和追加写),就不能读文件。如果既要读文件又要写文件,则可以采用“r+”,“w+”,“x+”,“a+”的组合模式,不能采用“rw”,“rx”“ra”组合模式,会抛出异常ValueError。用“w+”模式打开文件,此时会将文件指针移到文件头,文件原有的内容会被清空,原有的内容无法读出。用“a+”模式打开文件,此时会将文件指针移到文件尾,如果要读取文件原有的内容,则需要移动文件指针到文件头位置,然后读取文件内容。打开模式中可以单独使用“r”,“w”,“x”,“a”,而“b”,“t”,”+”不能单独使用,需要和“r”,“w”,“x”,“a”组合使用。浙江财经大学东方学院信息分院147.1.2文件的打开和关闭

MORETHENTEMPLATE(3)encoding参数表示采用何种编码方式打开文件,一般采用utf-8或者gbk编码方式。对于中文,由于编码方式不同,存在gbk编码及unicode编码等多种编码方式,在打开中文时,需要指定文件的编码方式。例如,文本文件在保存时用utf-8编码的,则打开文件时需要指定文件的编码方式为utf-8,如果源文件采用unicode编码的,则打开文件时指定文件的编码方式为utf-16,如果不指定编码方式,默认解码的方式为gbk编码。例如result.txt文件的编码方式为unicode编码,则打开文件代码如下:fo=open("result.txt",encoding="utf-16")如果不指定encoding参数为utf-16,则默认用gbk解码打开,此时会报错。浙江财经大学东方学院信息分院157.1.2文件的打开和关闭

MORETHENTEMPLATE2、

文件的关闭文件使用完毕之后,需要用close()函数将文件关闭,这样才能保证所作的修改能保存到文件中。该函数的使用方法如下:<变量名>.close()这里的变量名是指前面open()函数所创建的文件对象。例如关闭前面打开的result.txt文件,代码如下:fo.close()浙江财经大学东方学院信息分院167.1.2文件的打开和关闭

MORETHENTEMPLATE利用open()函数打开文件后会创建一个文件对象,通过该文件对象可以对文件进行读写操作及文件指针的移动操作。1文件读取方法浙江财经大学东方学院信息分院177.1.3文件的读写表7-2文件读取方法方法功能说明read(size=-1)默认读出文件所有内容,类型为字符串。如果给出参数size,则从文本文件中读取size个字符,或者从二进制文件中读取size个字节readline(size=-1)默认读出一行,类型为字符串。如果给出参数,则读取该行前size个字符或者字节readlines(hint=-1)默认读出所有行,结果为列表,列表元素为文件中的每一行。如果给出参数,则读取hint行

MORETHENTEMPLATE【例7-2】分别用三种读取方法读取文件并输出。首先,建立一个文本文件7.2.txt,文件中输入《论语》学而篇第一篇。(1)用read()方法读出并显示,代码如下:fo=open("7.2.txt","r")print(fo.read())结果显示如下:read()方法将文本文件中的所有文字读出,结果为字符串类型数据。print()函数再将该字符串输出显示。浙江财经大学东方学院信息分院187.1.3文件的读写

MORETHENTEMPLATE(2)用readline()方法读出并显示fo=open("7.2.txt","r")line=fo.readline()whileline:print(line)line=fo.readline()fo.close()结果显示如右图所示:思路是:读出一行,输出一行,循环的条件是读出的行不为空,如果为空,则说明读完,停止循环。可以看到,行与行之间会空一行。这是为什么呢?这是因为print()函数默认换行输出,若不要空一行,可以将上面的print(line)改为如下代码:print(line,end="")浙江财经大学东方学院信息分院197.1.3文件的读写

MORETHENTEMPLATE(3)用readlines()方法读出并显示fo=open("7.2.txt","r")forlineinfo.readlines(): print(line)fo.close()结果与用readline()方法读出的结果一样。要注意,这里fo.readlines()方法返回的是每一行作为元素构成的列表,用print()输出如下:['学而时习之,不亦说乎?\n','有朋自远方来,不亦乐乎?\n','人不知而不愠,不亦君子乎?']代码中的line是列表里的每一个元素,即每一行。列表中的“\n”表示换行符,正因为有换行符,文本文件中才能分行显示。浙江财经大学东方学院信息分院207.1.3文件的读写

MORETHENTEMPLATE上面的readlines()一次性将所有的行读出并存放到列表,对于大文件,一次性读出会占用大量内存,因此,可以通过直接访问文件对象来替代,代码如下:fo=open("7.2.txt","r")forlineinfo:print(line)fo.close()这里将fo.readlines()改为fo。文件对象fo可直接迭代,可用for循环遍历文件对象变量输出每一行。浙江财经大学东方学院信息分院217.1.3文件的读写2文件写入方法浙江财经大学东方学院信息分院227.1.3文件的读写

除了文件的读取方法,Python还提供了两种文件写入的方法,见表7-3。方法功能说明write(text)写字符串或字节流text到文件中。writelines(lines)写列表lines到文件中,lines列表中的元素为字符串表7-3文件写入方法

MORETHENTEMPLATE【例7-3】用两种写入方法将《论语》学而篇第一篇写入7.3.txt文件中。(1)用write(text)方法写入文件首先以只写模式打开文件。由于write(text)方法是写入字符串,因此,这里先将学而篇第一篇保存到txt变量中,然后再用write()方法写入文件。保存的时候注意每一行的后面要补上换行符,当写入文件后,txt文件中才会换行保存。txt='''学而时习之,不亦说乎?\n有朋自远方来,不亦乐乎?\n人不知而不愠,不亦君子乎?'''fo=open("7.3.txt","w")fo.write(txt)fo.close()运行后打开7.3.txt文件,结果见图7-3。浙江财经大学东方学院信息分院237.1.3文件的读写图7-3运行结果

MORETHENTEMPLATE【例7-3】用两种写入方法将《论语》学而篇第一篇写入7.3.txt文件中。(2)用writelines(lines)写入文件首先以只写模式打开文件。由于writelines(lines)方法是写入列表,因此,我们首先用列表ls保存唐诗的每一行,每一行是一个字符串,末尾加上换行符,然后将列表写入文件即可。txt='''学而时习之,不亦说乎?\n有朋自远方来,不亦乐乎?\n人不知而不愠,不亦君子乎?'''fo=open("7.3.txt","w")fo.writelines(ls)fo.close()运行后结果与write方法写入文件相同。浙江财经大学东方学院信息分院247.1.3文件的读写

MORETHENTEMPLATE“学而时习之,不亦乐乎?”是《论语》开篇之作-学而篇的第一句。这句话指出,人要不断学习,甚至终身学习。终身学习是社会每个成员为适应社会发展和实现个体发展的需要,贯穿于人的一生的、持续的学习过程。国家21世纪教育委员会向联合国教科文组织提交的报告中指出:“终身学习是21世纪人的通行证”。比尔.盖茨曾经说过:“21世纪,人们比的不是学习,而是学习的速度。”在现在的企业环境,没有打不破的铁饭碗。就如近年来飞速发展的教育培训行业,在这个炎热的六月,不啻于遭遇了一场暴风雪。有关部门的一连串工作,就像一套组合拳,打的培训机构晕头转向,教育培训机构大量裁员,一大批的教育培训人员失业,甚至有刚入职的大学生,马上就遭到辞退。今天你的工作可能不可或缺,并不意味着明天你的职位还存在。所以,我们必须不断学习,防患于未然。浙江财经大学东方学院信息分院257.1.3文件的读写

MORETHENTEMPLATE终身学习方面,有许多这方面的榜样。著名的物理学家爱因斯坦,就是终身学习的践行者。有人问爱因斯坦:“您可谓物理学界空前绝后的人了,何必还孜孜不倦地学习?何不舒舒服服地休息呢?”爱因斯坦找来一支笔、一张画,画了一个大圆和一个小圆,说:“目前,在物理学这个领域,可能是我比你懂得略多一些,正如你所知的是这个小圆,我所知的是这个大圆,然而,整个物理学是无边无际的,小圆的周长小,即与未知领域的接触面小,所以感受到自己未知的东西少;而大圆与外界接触的这一周长,所以感到自己未知的东西多,会更加努力去探索。”“饭可以一日不吃,觉可以一日不睡,书不可以一日不读;读书治学,一是要珍惜时间,二是要勤奋刻苦,除此以外,没有什么窍门和捷径。”这是毛泽东常说的一句话。我们每个人要树立终身学习的观念,做到在学习中工作,在工作中学习,真正做到“活到老,学到老。”浙江财经大学东方学院信息分院267.1.3文件的读写

MORETHENTEMPLATE3文件的指针及移动操作

在文件的读写过程中,文件指针起着很重要的作用。文件的读写,都是从文件指针的位置开始读写的。这就是为什么有时候看起来应该打印输出内容,而实际上没有输出内容的原因。以“r”或者“r+”模式打开文件时,文件指针指向文件头。以“w”或者“w+”模式打开文件时,文件指针指向文件头,并清空文件内容。以“a”或者“a+”模式打开文件时,文件指针指向文件尾。Python关于文件指针的相关操作方法见表7-4。浙江财经大学东方学院信息分院277.1.3文件的读写表7-4文件指针相关操作方法功能说明tell()返回文件指针的当前位置seek(offset[,whence])把文件指针移动到新的位置。offset为相对于whence的位置。whence为0,表示文件头,whence为1,表示当前位置,whence为2,表示文件尾。默认为0

MORETHENTEMPLATE

例如,在result.txt文件中输入“孤帆远影碧空尽,唯见长江天际流。”,并输入回车换行符。“,”和“。”都是中文状态下输入的。此时idle中输入以下代码:>>>os.chdir("e:\\python教材编写\\第7章案例")>>>fo=open("result.txt","r")>>>fo.tell()0>>>fo.readline()'孤帆远影碧空尽,唯见长江天际流。\n'>>>fo.tell()34>>>fo.seek(0,0)#文件指针移到文件头0浙江财经大学东方学院信息分院287.1.3文件的读写

MORETHENTEMPLATE>>>fo.tell()#显示当前文件指针位置为00可以看到以只读模式打开文件时,fo.tell()输出的文件指针位置为0,即在文件头开始位置。当用readline()读出当前行后,此时再次用fo.tell()输出,则文件指针位置为34。这是因为一个汉字为两个字节,包括标点符号都是中文输入的,因此这句诗的字节一共是32个字节,再加上行尾的回车换行符,加起来一共是34个字节。这里的result.txt的编码方式采用ANSI编码方式,如果是其他的编码方式,字节数大于34个字节,因为还有BOM标签。浙江财经大学东方学院信息分院297.1.3文件的读写扩展:记事本程序保存文件时的编码方式有4种:ANSI,Unicode,Unicodebigendian,UTF-8这四种。为了在打开文件时能够识别文件内容是哪种编码方式,在文件的开头会加上一个标签,叫BOM标签。标签如果是0xFF0XFE,则为unicode编码,如果是0xFE0xFF,则为unicodebigendian编码,如果是0xEF0xBB0xBF,则是UTF-8编码。如果没有这些标签,那么就是ANSI编码,使用操作系统的默认语言编码来解释。

MORETHENTEMPLATE【例7-4】有一个英文文本文件,编写程序读取其内容,并将文件里面的大写字母变成小写字母,小写字母变成大写字母。首先,用记事本创建一个文本文件english.txt,输入“Ilovemycountry-China!”。由于文件需要读取,又要写入,因此选用“r+”模式。编写程序代码如下:fo=open("english.txt","r+")result=""#保存大小写转换后的英文字符串forsinfo.read():ifs.islower():#如果是小写字母,则转换为大写result+=s.upper()elifs.isupper():#如果是大写字母,则转换为小写result+=s.lower()else:#如果是其他字符,则无需转换result+=s浙江财经大学东方学院信息分院307.1.3文件的读写fo.write(result)fo.close()

MORETHENTEMPLATE运行结果如下:结果不是将原来的文件内容改变了,而是在原来文件的末尾处增加了一段大小写转换后的英文,这是为什么呢?这主要是由于在执行代码fo.read()时,文件指针的位置发生变化了,文件指针的位置移到了文件尾的位置,我们可以在fo.write(result)这句代码之前加入fo.tell()来观察文件指针的位置,此时输出24,也就是在文件尾的位置。然后当执行fo.write(result)代码时,将从当前位置即文件尾的位置开始写入,从而在文件尾增加了一行。如何能实现题目的要求呢?可以在fo.write(result)语句之前加入fo.seek(0,0),将文件指针位置移到文件头,再写入文件,则可以实现题目要求。浙江财经大学东方学院信息分院317.1.3文件的读写02数据组织及处理1,35926778%除了单一的数据,更多的数据需要按照一定的方式组织起来,便于程序中显示及存储器中存储。按照数据的组织方式划分,数据可以划分为一维数据、二维数据和高维数据。本书主要介绍一维数据和二维数据。一维数据由对等关系的有序或无序数据构成,采用线性组织方式。二维数据是由多个一维数据构成,是一维数据的组合形式。浙江财经大学东方学院信息分院337.2.1数据的组织1,35926778%一维数据对应数组和集合概念,在Python中可以由列表,元组或者集合表示。如果数据是有序的数据,则用列表和元组表示。如果是无序的数据,则用集合表示。例如:列表ls1=["李白","杜甫","白居易"],集合s={"李白","杜甫","白居易"},元组tp=("李白","杜甫","白居易")。二维数据对应表的概念。在Python中可以用二维列表表示。例如:ls2=[["陶渊明","孟浩然","王维"],["高适","岑参","王之涣"],["杜甫","辛弃疾","陆游"]]。ls2列表中的每一个元素又是一个列表。二维列表是由多个一维列表组成的。浙江财经大学东方学院信息分院347.2.2一二维数据的表示1,35926778%一维数据对应数组和集合概念,在Python中可以由列表,元组或者集合表示。如果数据是有序的数据,则用列表和元组表示。如果是无序的数据,则用集合表示。例如:列表ls1=["李白","杜甫","白居易"],集合s={"李白","杜甫","白居易"},元组tp=("李白","杜甫","白居易")。二维数据对应表的概念。在Python中可以用二维列表表示。例如:ls2=[["陶渊明","孟浩然","王维"],["高适","岑参","王之涣"],["杜甫","辛弃疾","陆游"]]。ls2列表中的每一个元素又是一个列表。二维列表是由多个一维列表组成的。浙江财经大学东方学院信息分院357.2.3一二维数据的存储1一维数据的存储一维数据有多种存储方式,通常采用特殊分隔符进行分隔存储。(1)由空格分隔,例如:李白杜甫白居易(2)由逗号分隔李白,杜甫,白居易(3)由特殊符号分隔李白#杜甫#白居易浙江财经大学东方学院信息分院367.2.3一二维数据的存储2二维数据的存储二维数据由多个一维数据组成。这里介绍csv格式文件,可用于存储一、二维数据。这是一种通用的文件存储格式,被商业和科学广泛应用。CSV格式是一种逗号分隔值(Comma-SeparatedValues,CSV)的文件存储方式,其文件以纯文本形式存储数据。CSV文件是指具有以下特征的文件:(1)纯文本格式,文件存储的是字符序列。(2)开头不留空行,以行为单位(3)可包含或者不含列名,包含列名时则放在文件的第一行(4)文件由记录组成,每一行是一条记录。(5)每行记录的数据之间用半角逗号作分隔符,列为空也要保留逗号例如,前面的二维列表在文件中可作如下形式保存。陶渊明,孟浩然,王维高适,岑参,王之涣杜甫,陆游,辛弃疾浙江财经大学东方学院信息分院377.2.3一二维数据的存储下面以csv格式文件为例,介绍一二维数据的处理。1一维数据的处理从csv文件读入一维数据后,可以用split()函数分隔存放到列表。如果要写入一维列表数据到csv文件中,可以用join()函数将一维列表的各个元素用逗号连接起来写入文件即可。【例7-5】一维数据的读入首先,利用Excel建立7.5.csv文件,输入“李白,杜甫,白居易”,见图7-4。

图7-47.5csv文件内容浙江财经大学东方学院信息分院387.2.4一二维数据的处理下面以csv格式文件为例,介绍一二维数据的处理。接下来将7.5.csv文件的内容读出到列表ls中,代码如下:fo=open("7.5.csv","r")str=fo.read()#读出文件所有内容,结果为字符串str=str.replace("\n","")#去掉末尾换行符ls=str.split(",")#以空格分隔str字符串,并将元素存入列表lsprint(ls)fo.close()输出为一个一维列表,运行结果如下:['李白','杜甫','白居易']浙江财经大学东方学院信息分院397.2.4一二维数据的处理【例7-6】一维数据的写入fo=open("7.6.csv","w")ls=["李白","杜甫","白居易"]str=",".join(ls)#将列表内的元素用逗号连接起来保存到str字符串fo.write(str)#将str字符串写入文件fo.close()运行后打开7.6.csv,结果与图7-4相同。浙江财经大学东方学院信息分院407.2.4一二维数据的处理2二维数据的处理二维数据的处理,包括二维数据从csv格式文件读入到二维列表、二维列表元素的处理以及二维列表写入到csv格式文件中。【例7-7】从csv格式文件读入到二维列表中首先,利用Excel输入以下内容,另存为7.7.csv格式文件,见图7-5。

图7-57.7csv文件内容浙江财经大学东方学院信息分院417.2.4一二维数据的处理接下来从7.7.csv文件中读入内容并保存到二维列表中ls中,代码如下:fo=open("7.7.csv","r")ls=[]forlineinfo:#line表示文件中的每一行,行尾有换行符line=line.replace("\n","")#将换行符替换为空字符串ls.append(line.split(","))#将行字符串分隔为一维列表并追加print(ls)fo.close()案例中,用for循环遍历每一行,然后对每行处理为一维列表并追加到二维列表中。运行后列表ls内容如下,是一个二维列表。[['陶渊明','孟浩然','王维'],['高适','岑参','王之涣'],['杜甫','辛弃疾','陆游']]浙江财经大学东方学院信息分院427.2.4一二维数据的处理【例7-8】二维数据的写入fo=open("7.8.csv","w")ls=[["陶渊明","孟浩然","王维"],["高适","岑参","王之涣"],["杜甫","辛弃疾","陆游"]]forlineinls:#line为ls中的每一个一维列表str=",".join(line)#将一维列表元素之间用逗号连接为字符串str+="\n"#字符串末尾加上换行符,以便写入文本时换行fo.write(str)#写入字符串fo.close()案例中,用for循环遍历每个一维列表,将每一个一维列表处理成一个元素之间逗号相连接,尾部带有换行符的一个字符串,然后写入文件。运行后打开7.8.csv文件,内容见图7-6。浙江财经大学东方学院信息分院437.2.4一二维数据的处理【例7-9】二维列表元素的遍历输出。二维数据元素的访问,类似于矩阵元素的访问,可以用行号和列号访问。例如,前面的二维列表ls2中,"陶渊明"在第0行第0列中,可以用print(ls[0][0])输出,"王之涣"在第1行第2列,可以用print(ls[1][2])输出,也就是用行号和列号定位某个元素。如果要输出第0行,可以用print(ls[0])输出,要输出第2行,可以用print(ls[2])输出。二维列表元素的遍历,可以用双层for循环遍历输出。循环遍历时,可以用两个变量分别表示行号和列号,定位每个元素并输出;也可以外循环遍历二维列表中的每一个一维列表,再内循环遍历每一个一维列表并输出元素。浙江财经大学东方学院信息分院447.2.4一二维数据的处理【例7-9】二维列表元素的遍历输出。(1)第一种方法ls=[["陶渊明","孟浩然","王维"],["高适","岑参","王之涣"],["杜甫","辛弃疾","陆游"]]forrowinrange(len(ls)):#row为行号forcolinrange(len(ls[row])):#col为列号element=ls[row][col]#通过行号和列号访问print(element,end="")print("\n")#一行输出后换行浙江财经大学东方学院信息分院457.2.4一二维数据的处理【例7-9】二维列表元素的遍历输出。(2)第二种方法ls=[["陶渊明","孟浩然","王维"],["高适","岑参","王之涣"],["杜甫","辛弃疾","陆游"]]forlineinls:#外循环遍历每一个一维列表forelementinline:#内循环遍历每一个一维列表中的元素print(element,end="")print("\n")#一行输出后换行浙江财经大学东方学院信息分院467.2.4一二维数据的处理03学生成绩处理实例有某班级学生三门课程的学生成绩,用文本文件保存,内容见图7-7,现要求输出该班级所有学生的总分,并对总分进行排名,同时输出每门课程的最高分,最低分以及平均分。

图7-7学生成绩表浙江财经大学东方学院信息分院487.3学生成绩处理实例代码如下所示:defcalcScore(xs,kc):#输入学生列表,课程名称,返回课程的最高分,最低分,平均分col=xs[0].index(kc)headLine=xs[0]#headline为标题行xs.pop(0)kcScore=[]forlsinxs:kcScore.append(ls[col])maxScore=max(kcScore)##找出最高分minScore=min(kcScore)##找出最低分aveScore=sum(kcScore)/len(kcScore)##找出平均值xs.insert(0,headLine)returnmaxScore,minScore,aveScore浙江财经大学东方学院信息分院497.3学生成绩处理实例#计算总分并根据总分降序排序,给出排名并输出显示defRank(xs):headLine=xs[0]headLine.append("总分")headLine.append("排名")xs.pop(0)#计算总分forlineinxs:score=line[2]+line[3]+line[4]line.append(score)col=headLine.index("总分")xs.sort(key=lambdax:x[col],reverse=True)浙江财经大学东方学院信息分院507.3学生成绩处理实例#计算排名ranking=0forlineinxs:ranking+=1line.append(ranking)#插入标题xs.insert(0,headLine)returnxs

#将数据对齐显示defformatData(xs):headLine=xs[0]#标题行补空格foriinrange(len(headLine)):headLine[i]+=int((12-len(headLine[i])*2)/2)*chr(12288)xs.pop(0)

浙江财经大学东方学院信息分院517.3学生成绩处理实例#将剩下的行对齐forlineinxs:line[0]="{:<12}".format(line[0])line[1]="{0:{1}<6}".format(line[1],chr(12288))line[2]="{:<12}".format(line[2])line[3]="{:<12}".format(line[3])line[4]="{:<12}".format(line[4])line[5]="{:<12}".format(line[5])line[6]="{:<12}".format(line[6])xs.insert(0,headLine)forlineinxs:print("".join(line))returnxs#将排名写入file文件中defwriteData(file,xs):fo=open(file,"w")forlineinxs:fo.writelines(line)fo.write("\n")fo.close()

浙江财经大学东方学院信息分院527.3学生成绩处理实例defmain():fo=open("学生成绩表.txt","r")xs=[]#处理第一行标题行line=fo.readline()line=line.replace("\n","")ls=line.split(",")xs.append(ls)

浙江财经大学东方学院信息分院537.3学生成绩处理实例#处理下面的行forlineinfo.readlines():line=line.replace("\n","")ls=line.split(",")ls[2]=eval(l

温馨提示

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

评论

0/150

提交评论