1、第第7 7章章文件文件Overview文件文件读写读写*Pandas模块读写常见格式模块读写常见格式文件文件*数据数据可视化可视化2Python程序设计7.1文件读写文件读写计算机文件,是存储在某种长期储存设备上的一段数据流。所谓“长期储存设备”一般指磁盘、光盘、磁带等。其特点是所存信息可以长期、多次使用,不会因为断电而消失。计算机文件可分为二种:二进制文件和文本文件图形文件及文字处理程序等计算机程序都属于二进制文件。这些文件含有特殊的格式及计算机代码。文本文件则是可以用文字处理程序阅读的简单文本文件。3Python程序设计文件读写步骤1.打开文件2.处理数据3.关闭文件Python程序设计4
2、显示文件名为7-1.txt的内容,该文件只有一行textFile=open(7-1.txt,rt)#以文本方式打开t=textFile.readline()print(t)textFile.close()binFile=open(7-1.txt,rb)#以二进制方式打开b=binFile.readline()print(b)binFile.close()程序输出:欢迎学习Python语 言bxbbxb6xd3xadxd1xa7xcfxb0Pythonxd3xefxd1xd4Python程序设计5open函数fileobj=open(filename,mode)fileobj是open()返回的
3、文件对象filename是该文件的文件名mode是指明文件类型和操作的字符串mode的第一个字母表明对其的操作。mode的第二个字母是文件类型:t(可省略)代表文本类型文件;b代表二进制类型文件。后面的文件处理操作均以文本方式为例。Python程序设计6文件打开模式文件打开模式文件打开模式含义含义r只读模式(默认)w覆盖写模式(不可读,不存在则新创建;存在则重写新内容)a追加模式(可读,不存在则新创建;存在则只追加内容)x创建写模式(不可读,不存在则新创建;存在则出错)+与r/w/a/x一起使用,增加读写功能t文本类型b二进制类型Python程序设计7文件读写函数名称名称含义含义open()打
4、开文件read(size)从文件读取size大小字节数,如果未给定或为负则读取所有内容readline()读取整行readlines()读取所有行并返回列表write(s)把字符串s的内容写入文件writelines(s)向文件写入一个元素为字符串的列表,如果需要换行则要自己加入每行的换行符。seek(off,whence=0)设置文件当前位置tell()返回文件读写的当前位置close()关闭文件。关闭后文件不能再进行读写操作。Python程序设计8【例7-2】文件复制Python程序设计9cj.txt文件是学生一门课的成绩,它的内容如下:97809369879084947576898383
5、3372486686988989888763878110080376871779866472987939610070858335需要把这个文件的内容复制到“cjback.txt”文件中。复制文件不需要考虑行结构,用read函数就可以了。程序:source=open(cj.txt,r)back=open(cjback.txt,w)s=source.read()back.write(s)source.close()back.close()【例7-3】计算总评分Python程序设计10文件score.txt是学生一学期的成绩,每一行代表一个学生的成绩,由笔试、平时和实验三部分构成。总评=笔试*50%
6、平时*25%+实验*25%学号学号姓名姓名专业专业笔试笔试平时平时实验实验2050921018詹延峰计算数学6585762050921036李小鹏金融学类8695852050921039裴凡法经济学类8695652040912116茅舒瑶社会保障90951002050912017陈见影化学工程6275922050912064梅钦钦材料科学8795802050109153王影平大气科学8689722050151003韩平医化学工程829960readlines函数f=open(score.txt,r)s=f.readlines()print(s)运行结果:学号 姓名 专业 笔试 平时 实验n,
7、2050921018詹延峰 计算数学658576n,2050921036李 小鹏金融学类869585n,2050921039裴凡法 经济学类869565n,2040912116茅舒瑶 社会保障9095100n,2050912017陈 见影 化学 工程627592n,2050912064梅 钦钦 材料科学879580n,2050109153王影平大 气科学868972n,2050151003韩平医 化学 工程829960nPython程序设计11文件逐行读取文件逐行读取f=open(score.txt,r)forlineinf.readlines():print(line)程序输出:学号 姓名
8、专业 笔试 平时 实验2050921018詹延峰 计算数学6585762050921036李 小鹏金融学类8695852050921039裴凡法 经济学类869565。Python程序设计12计算总评分f=open(score.txt,r)head=f.readline()#读表头行newhead=head:9+head9:18+head18:-1+总评成绩#加空格对齐print(newhead)forlineinf.readlines():l=line.split()#求总评分s=round(int(l3)*0.5+int(l4)*0.25+int(l5)*0.25,2)l4=+l4#加空格
9、对齐l5=+l5#加空格对齐print(.join(l)+str(s)#加空格对齐Python程序设计13总评成绩学号学号姓名姓名专业专业笔试笔试平时平时实验实验总评成绩总评成绩2050921018詹延峰计算数学65857672.752050921036李小鹏金融学类86958588.02050921039裴凡法经济学类86956583.02040912116茅舒瑶社会保障909510093.752050912017陈见影化学工程62759272.752050912064梅钦钦材料科学87958087.252050109153王影平大气科学86897283.252050151003韩平医化学工
10、程82996080.75Python程序设计14重定向Python程序设计15sys.stdin标准输入sys.stdout标准输出sys.stderr标准错误输出importsyss=sys.stdin.readlines()#从文件读入变为从键盘输入 print(s)词频统计(取自pintia网站)请编写程序,对一段英文文本,统计其中所有不同单词的个数,以及词频最大的10%的单词。所谓“单词”,是指由不超过80个单词字符组成的连续字符串,但长度超过15的单词将只截取保留前15个单词字符。而合法的“单词字符”为大小写字母、数字和下划线,其它字符均认为是单词分隔符。注意“单词”不区分英文大小写
11、例如“PAT”和“pat”被认为是同一个单词。输入给出一段非空文本,最后以符号#结尾。输入保证存在至少10个不同的单词。输出按照词频递减的顺序,按照“词频:单词”的格式输出词频最大的前10%的单词。若有并列,则按递增字典序输出。16DataandComputation输入处理输入处理“s=sys.stdin.read()”表示重定向为键盘输入“s:s.find(#)”表示取输入字符串,以符号“#”结尾Python程序设计17产生词频字典Python程序设计18forkinset(iforiinstrsifi.isalnum()=Falseandi!=_):strs=strs.replace(
12、k,)#其它字符均认为是单词分隔符 strs=strs.rstrip().lower().split()#全部变小写counts=dict()foriinstrs:k=i:15ifknotincounts:countsk=1else:countsk+=1排序及输出#词频递减的顺序,若有并列,则按递增字典序 ans=sorted(counts.items(),key=lambdax:(-x1,x0)print(len(counts)foriinrange(0,int(0.1*len(counts):词频最大的前10%的单词 print(str(ansi1)+:+ansi0)Python程序设计1
13、9完整程序importsyss=sys.stdin.read()strs=s:s.find(#)#以符号#结尾forkinset(iforiinstrsifi.isalnum()=Falseandi!=_):strs=strs.replace(k,)#其它字符均认为是单词分隔符 strs=strs.rstrip().lower().split()#全部变小写counts=dict()foriinstrs:k=i:15ifknotincounts:countsk=1else:countsk+=1#词频递减的顺序,若有并列,则按递增字典序 ans=sorted(counts.items(),key
14、lambdax:(-x1,x0)print(len(counts)foriinrange(0,int(0.1*len(counts):词频最大的前10%的单词 print(str(ansi1)+:+ansi0)Python程序设计20*7.2用用Pandas模块读写常见格式文件模块读写常见格式文件Python的模块函数分三个层次:一.内置函数不用import语句引入,它里面的函数可直接调用。二.标准模块函数用import语句引入后再调用,但不必安装。如math库。三.第三方模块函数需先安装,再用import语句引入模块后才能调用里面的函数,如Pandas模块。Python程序设计21第三方库
15、安装Python程序设计22打开网页:https:/pypi.org/输入模块名,就可查到模块的详细说明pip命令Python程序设计23c:pipinstallpandas安装pandas模块Pandas模块模块Pandas是python的一个数据分析包,Pandas最初被作为金融数据分析工具而开发出来,Pandas为时间序列分析提供了很好的支持。Pandas是基于NumPy的一种工具。Pandas纳入了大量函数和一些标准的数据模型,提供了高效地操作大型数据集所需的工具,提供了大量能使我们快速便捷地处理数据的函数和方法,它是使Python成为强大而高效的数据分析环境的重要因素之一。Pytho
16、n程序设计24Plotly模块模块Plotly是一个基于JavaScript的动态绘图模块。Plotly的绘图效果与我们在网页上看到的动态交互式绘图结果是一样的,其默认的绘图结果是一个HTML网页文件,通过浏览器就可以查看。Plotly有着自己强大又丰富的绘图库,支持各种类型的绘图方案。Plotly是基于JavaScript的绘图库,所以其绘图结果可以与web应用无缝集成。Plotly最初是一款商业化的绘图软件,自plotly.js开源之后,我们可以使用本地的离线模式进行绘图,不依赖于官方的服务器,使得绘图速度更快,而效果与在线绘图一样,这也是目前使用Plotly绘图的主流模式。fromplo
17、tly.offlineimportplot网址:https:/plot.ly/python/Python程序设计25DataFrame数据类型DataFrame是Pandas库的一种数据类型。DataFrame是一个行和列都具有标签的表格,它与Excel电子表格并无不同。DataFrame使用非常方便,当你在处理二维表格数据时,都应该使用它们。DataFrame可由元组、列表、Python字典或另一个DataFrame构造出来Python程序设计26用列表产生DataFrame变量dataPython程序设计27fromplotly.offlineimportplotfromplotlyimp
18、ortfigure_factoryasFFimportpandasaspddata=pd.DataFrame(2050921018,詹延峰,计算数学,65,85,76,2050921036,李 小鹏,金融学类,86,95,85,2050921039,裴凡法,经济学类,86,95,65,2040912116,茅舒瑶,社会保障,90,95,100,2050912017,陈 见影,化学 工程,62,75,92,2050912064,梅 钦钦,材料科学,87,95,80,2050109153,王影平,大 气科学,86,89,72,2050151003,韩平医,化学 工程,82,99,60,column
19、s=(学号,姓名,专业,笔试,平时,实验)table=FF.create_table(data)#用plotly产生输出表格plot(table,show_link=False)程序输出程序输出Python程序设计28用DataFrame计算总评分Python程序设计29fromplotly.offlineimportplotfromplotlyimportfigure_factoryasFFimportpandasaspddata=pd.DataFrame(2050921018,詹延峰,计算数学,65,85,76,2050921036,李 小鹏,金融学类,86,95,85,205092103
20、9,裴凡法,经济学类,86,95,65,2040912116,茅舒瑶,社会保障,90,95,100,2050912017,陈 见影,化学 工程,62,75,92,2050912064,梅 钦钦,材料科学,87,95,80,2050109153,王影平,大 气科学,86,89,72,2050151003,韩平医,化学 工程,82,99,60,columns=(学号,姓名,专业,笔试,平时,实验)data总评成绩=data笔试*0.5+data平时*0.25+data实验*0.25table=FF.create_table(data)plot(table,show_link=False)程序输出P
21、ython程序设计30用用pandas读写各种类型文件读写各种类型文件Python程序设计31读取函数读取函数写入函数写入函数含义含义read_csvto_csv读写csv文件read_excelto_excel读写excel文件read_jsonto_json读写json文件read_clipboardto_clipboard读写粘贴板内容读取CSV和表格文件importplotlyaspyfromplotlyimportfigure_factoryasFFimportplotly.graph_objsaspygoimportpandasaspdpyplt=py.offline.plot#离
22、线模式data=pd.read_csv(score.csv,encoding=GBK)table=FF.create_table(data)#产生表格pyplt(table,show_link=False)GB2312、GBK和CP936都是用两个字节表示中文。GB2312是中国制定的中文编码,GBK是GB2312的扩展,CP936是在GB2312基础上开发的汉字编码。Python程序设计32写网页文件产生网页文件scoregp.htmlimportplotlyaspyfromplotlyimportfigure_factoryasFFimportplotly.graph_objsaspygo
23、importpandasaspdpyplt=py.offline.plot#离线模式data=pd.read_csv(scoregp.csv,encoding=GBK)table=FF.create_table(data)#产生表格pyplt(table,filename=scoregp.html,show_link=False)Python程序设计33读写Excel文件要装xlrd模块读score.xlsx文件写入scoregp.xlsx文件importpandasaspddata=pd.read_excel(score.xlsx)data总评=data笔试*0.5+data平时*0.25+
24、data实验*0.25data.to_excel(scoregp.xlsx,index=0)Python程序设计34JSON文件读写JSON建构于两种结构:“名称/值”对的集合(Acollectionofname/valuepairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hashtable),有键列表(keyedlist),或者关联数组(associativearray)。Python中对应字典类型。值的有序列表(Anorderedlistofvalues)。在大部分语言中,它被理解为数组(array
25、这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们,这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。Python中对应列表类型。Python程序设计35to_json和read_json读取Excel文件score.xlsx”,用to_json函数产生JSON文件data.json,最后用read_json读JSON文件“data.json”importpandasaspddata=pd.read_excel(score.xlsx)data.to_json(data.json,force_ascii=False)jsondata=pd.read_json
26、data.json)print(jsondata)Python程序设计36*7.3数据数据可视化可视化-plotly模块fromplotly.offlineimportplotimportplotly.graph_objsasgomydata=x:1,2,y:5,6mylayout=fig=go.Figure(data:mydata,layout:mylayout)#fig=go.Figure(data=mydata,layout=mylayout)plot(fig)Python程序设计37折线图折线图#绘制总评分的折线图fromplotly.offlineimportplotimportp
27、lotly.graph_objsasgoimportpandasaspddata=pd.read_csv(score.csv,encoding=GBK)data总评成绩=data笔试*0.5+data平时*0.25+data实验*0.25xdata=data姓名.tolist()#x轴数据ydata=data总评成绩.tolist()#y轴数据fig=go.Figure(data:go.Scatter(x=xdata,y=ydata)plot(fig)Python程序设计38输出图形输出图形Python程序设计39同时绘制笔试和总评分的折线图fromplotly.offlineimportpl
28、otimportplotly.graph_objsasgoimportpandasaspddata=pd.read_csv(score.csv,encoding=GBK)data总评成绩=data笔试*0.5+data平时*0.25+data实验*0.25data总评成绩=data笔试*0.5+data平时*0.25+data实验*0.25xdata=data姓名.tolist()#取姓名这 一列,变列表ydata1=data总评成绩.tolist()#取总评成绩这一列,变列表ydata2=data笔试.tolist()#取笔试成绩这一列,变列表trace0=go.Scatter(x=xdat
29、a,y=ydata1,name=总评成绩)#总评折线trace1=go.Scatter(x=xdata,y=ydata2,name=笔试成绩)#笔试折线mylayout=go.Layout(title=总评成绩和笔试成绩相关图)#图的标题fig=go.Figure(data=trace0,trace1,layout=mylayout)plot(fig)Python程序设计40显示图形Python程序设计41气泡图fromplotly.offlineimportplotimportplotly.graph_objsasgoimportnumpyasnpN=10 x=np.random.rand(
30、N)y=np.random.rand(N)colors=np.random.rand(N)sz=np.random.rand(N)*30fig=go.Figure()fig.add_scatter(x=x,y=y,mode=markers,marker=size:sz,color:colors,opacity:0.6,colorscale:Viridis);plot(fig)Python程序设计42气泡图参数mode=markers散点图,气泡图marker=size:sz,点的大小color:colors,点的颜色opacity:0.6,点的透明度colorscale:Viridismode
31、lines,折线图Mode=“lines+markers”折线图+散点图Python程序设计43绘制成绩柱状图fromplotly.offlineimportplotimportplotly.graph_objsasgoimportpandasaspddata=pd.read_csv(score.csv,encoding=GBK)xdata=data姓名.tolist()#取姓名这 一列,变列表ydata1=(data平时*0.25).tolist()#取平时成绩这 一列,变列表ydata2=(data笔试*0.5).tolist()ydata3=(data实验*0.25).tolist()
32、trace0=go.Bar(x=xdata,y=ydata1,name=平时成绩)trace1=go.Bar(x=xdata,y=ydata2,name=笔试成绩)trace2=go.Bar(x=xdata,y=ydata3,name=实验成绩)layout=go.Layout(title=层叠柱状图表表示成绩,barmode=stack)fig=go.Figure(data=trace0,trace1,trace2,layout=layout)plot(fig)Python程序设计44柱状图Python程序设计45显示各部分成绩Python程序设计46圆饼图fromplotly.offlin
33、eimportplotimportplotly.graph_objsasgolabels=Oxygen,Hydrogen,Carbon_Dioxide,Nitrogenvalues=4500,2500,1053,500trace=go.Pie(labels=labels,values=values)plot(trace)Python程序设计47FIGURE层次DATATRACEx,y,zcolor,text,sizecolorscaleABC,MARKERcolorABCsymbolABCLINEcolorABCwidth123LAYOUTtitleabcXAXISYAXISSCENEXAXI
34、S,YAXIS,ZAXISGE0LEGENDANNOTATIONSPython程序设计48表格和折线同屏显示fromplotly.offlineimportplotimportplotly.graph_objsasgoimportnumpyasnpimportpandasaspddf=pd.read_csv(https:/ app_id,api_key,secret_key3.调用apiPython程序设计53OCR程序#创建应用时获得app_id=api_key=GeXoGVKWxWv8bOVo0k766taZsecret_key=IPIdVWIq85GwWcmtLKeYWVbbdk05lAkqfromaipimportAipOcrclient=AipOcr(app_id,api_key,secret_key)f=open(1.png,rb)#打开图形文件image=f.read()f.close()dict1=client.general(image)foriindict1words_result:print(iwords)Python程序设计54本章例题代码Python程序设计55






