您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > Python > Python教案7-1-文件和数据格式化
Python语言程序设计第7章文件和数据格式化文件的使用文件概述文件是一个存储在辅助存储器上的数据序列,可以包含任何数据内容。概念上,文件是数据的集合和抽象,类似地,函数是程序的集合和抽象。用文件形式组织和表达数据更有效也更为灵活。文件包括两种类型:文本文件和二进制文件。文件概述二进制文件直接由比特0和比特1组成,没有统一字符编码,文件内部数据的组织格式与文件用途有关。二进制文件和文本文件最主要的区别在于是否有统一的字符编码无论文件创建为文本文件或者二进制文件,都可以用“文本文件方式”和“二进制文件方式”打开,打开后的操作不同。文件概述微实例7.1:理解文本文件和二进制文件的区别。微实例7.1m7.1DiffTextBin.py123456textFile=open(7.1.txt,rt)#t表示文本文件方式print(textFile.readline())textFile.close()binFile=open(7-1.txt,rb)#r表示二进制文件方式print(binFile.readline())binFile.close()文件概述输出结果为:中国是个伟大的国家!b'\xd6\xd0\xb9\xfa\xca\xc7\xb8\xf6\xce\xb0\xb4\xf3\xb5\xc4\xb9\xfa\xbc\xd2\xa3\xa1'采用文本方式读入文件,文件经过编码形成字符串,打印出有含义的字符;采用二进制方式打开文件,文件被解析为字节(byte)流。由于存在编码,字符串中的一个字符由2个字节表示。文件的打开关闭Python对文本文件和二进制文件采用统一的操作步骤,即“打开-操作-关闭”文件的打开关闭Python通过解释器内置的open()函数打开一个文件,并实现该文件与一个程序变量的关联,open()函数格式如下:变量名=open(文件名,打开模式)open()函数有两个参数:文件名和打开模式。文件名可以是文件的实际名字,也可以是包含完整路径的名字文件的打开关闭open()函数提供7种基本的打开模式打开模式含义'r'只读模式,如果文件不存在,返回异常FileNotFoundError,默认值'w'覆盖写模式,文件不存在则创建,存在则完全覆盖源文件'x'创建写模式,文件不存在则创建,存在则返回异常FileExistsError'a'追加写模式,文件不存在则创建,存在则在原文件最后追加内容'b'二进制文件模式't'文本文件模式,默认值'+'与r/w/x/a一同使用,在原功能基础上增加同时读写功能文件的读写根据打开方式不同可以对文件进行相应的读写操作,Python提供4个常用的文件内容读取方法方法含义file.readall()读入整个文件内容,返回一个字符串或字节流*file.read(size=-1)从文件中读入整个文件内容,如果给出参数,读入前size长度的字符串或字节流file.readline(size=-1)从文件中读入一行内容,如果给出参数,读入该行前size长度的字符串或字节流file.readlines(hint=-1)从文件中读入所有行,以每行为元素形成一个列表,如果给出参数,读入hint行文件的读写微实例7.2:文本文件逐行打印微实例7.2m7.2PrintFilebyLines.py12345fname=input(请输入要打开的文件:)fo=open(fname,r)forlineinfo.readlines():print(line)fo.close()文件的读写遍历文件的所有行可以直接这样完成12345fname=input(请输入要打开的文件:)fo=open(fname,r)forlineinfo:print(line)fo.close()文件的读写如果程序需要逐行处理文件内容,建议采用上述代码格式:fo=open(fname,r)forlineinfo:#处理一行数据fo.close()文件的读写Python提供3个与文件内容写入有关的方法,如表所示。方法含义file.write(s)向文件写入一个字符串或字节流file.writelines(lines)将一个元素为字符串的列表写入文件file.seek(offset)改变当前文件操作指针的位置,offset的值:0:文件开头;1:当前位置;2:文件结尾文件的读写微实例7.3m7.3WriteListtoFile.py1234567fname=input(请输入要写入的文件:)fo=open(fname,w+)ls=[唐诗,宋词,元曲]fo.writelines(ls)forlineinfo:print(line)fo.close()程序执行结果如下:请输入要写入的文件:test.txtPIL库的使用PIL库概述PIL(PythonImageLibrary)库是Python语言的第三方库,需要通过pip工具安装。:\pipinstallpillow#或者pip3installpillowPIL库支持图像存储、显示和处理,它能够处理几乎所有图片格式,可以完成对图像的缩放、剪裁、叠加以及向图像添加线条、图像和文字等操作。PIL库概述PIL库可以完成图像归档和图像处理两方面功能需求:图像归档:对图像进行批处理、生成图像预览、图像格式转换等;图像处理:图像基本处理、像素处理、颜色处理等。PIL库Image类解析在PIL中,任何一个图像文件都可以用Image对象表示Image类的图像读取和创建方法。方法描述Image.open(filename)根据参数加载图像文件Image.new(mode,size,color)根据给定参数创建一个新的图像Image.open(StringIO.StringIO(buffer))从字符串中获取图像Image.frombytes(mode,size,data)根据像素点data创建图像Image.verify()对图像文件完整性进行检查,返回异常PIL库Image类解析要加载一个图像文件,最简单的形式如下,之后所有操作对im起作用fromPILimportImageim=Image.open(D:\\pycodes\\birdnest.jpg)PIL库Image类解析Image类有4个处理图片的常用属性属性描述Image.format标识图像格式或来源,如果图像不是从文件读取,值是NoneImage.mode图像的色彩模式,L灰度图像、RGB真彩色图像、CMYK出版图像Image.size图像宽度和高度,单位是像素(px),返回值是二元元组(tuple)Image.palette调色板属性,返回一个ImagePalette类型PIL库Image类解析微实例7.1:GIF文件图像提取。对一个GIF格式动态文件,提取其中各帧图像,并保存为文件。微实例7.1m7.1GifExtractor.py123456789fromPILimportImageim=Image.open('pybit.gif')#读入一个GIF文件try:im.save('picframe{:02d}.png'.format(im.tell()))whileTrue:im.seek(im.tell()+1)im.save('picframe{:02d}.png'.format(im.tell()))except:print(处理结束)PIL库Image类解析Image类的图像转换和保存方法如表所示。方法描述Image.save(filename,format)将图像保存为filename文件名,format是图片格式Image.convert(mode)使用不同的参数,转换图像为新的模式Image.thumbnail(size)创建图像的缩略图,size是缩略图尺寸的二元元组PIL库Image类解析生成birdnest.jpg图像的缩略图,其中(128,128)是缩略图的尺寸。im.thumbnail((128,128))im.save(birdnestTN,JPEG)北京鸟巢图片及其缩略图PIL库Image类解析Image类可以缩放和旋转图像,其中,rotate()方法以逆时针旋转的角度值作为参数来旋转图像。方法描述Image.resize(size)按size大小调整图像,生成副本Image.rotate(angle)按angle角度旋转图像,生成副本PIL库Image类解析Image类能够对每个像素点或者一幅RGB图像的每个通道单独进行操作,split()方法能够将RGB图像各颜色通道提取出来,merge()方法能够将各独立通道再合成一幅新的图像。方法描述Image.point(func)根据函数func功能对每个元素进行运算,返回图像副本Image.split()提取RGB图像的每个颜色通道,返回图像副本Image.merge(mode,bands)合并通道,采用mode色彩,bands是新色的色彩通道Image.blend(im1,im2,alpha)将两幅图片im1和im2按照如下公式插值后生成新的图像:im1*(1.0-alpha)+im2*alphaPIL库Image类解析微实例7.2:图像的颜色交换。交换图像中的颜色。可以通过分离RGB图片的三个颜色通道实现颜色交换微实例7.2m7.1ChangeRGB.py12345fromPILimportImageim=Image.open('birdnest.jpg')r,g,b=im.split()om=Image.merge(RGB,(b,g,r))om.save('birdnestBGR.jpg')PIL库Image类解析被改变颜色的北京鸟巢图片PIL库Image类解析操作图像的每个像素点需要通过函数实现,采用lambda函数和point()方法搭配使用,例子如下im=Image.open('D:\\pycodes\\birdnest.jpg')#打开鸟巢文件r,g,b=im.split()#获得RGB通道数据newg=g.point(lambdai:i*0.9)#将G通道颜色值变为原来的0.9倍newb=b.point(lambdai:i100)#选择B通道值低于100的像素点om=Image.merge(im.mode,(r,newg,newb))#将3个通道合形成新图像om.save('D:\\pycodes\\birdnestMerge.jpg')#输出图片PIL库Image类解析去掉光线的北京鸟巢图片图像的过滤和增强PIL库的ImageFilter类和ImageEnhance类提供了过滤图像和增强图像的方法,共10种方法表示描述ImageFilter.BLUR图像的模糊效果ImageFilter.CONTOUR图像的轮廓效果ImageFilter.DETAIL图像的细节效果ImageFilter.EDGE_ENHANCE图像的边界加强效果ImageFilter.EDGE_ENHANCE_MORE图像的阈值边界加强效果ImageFilter.EMBOSS图像的浮雕效果ImageFilter.FIND_EDGES图像的边界效果ImageFilter.SMOOTH图像的平滑效果ImageFilter.SMOOTH_MORE图像的阈值平滑效果ImageFilter.SHARPEN图像的锐化效果图像的过滤和增强利用Image类的filter()方法可以使用ImageFilter类,如下:Image.filter(ImageFilter.fuction)微实例7.3:图像的轮廓获取。获取图像的轮廓,北京鸟巢变得更加抽象、更具想象空间!图像的过滤和增强微实例7.3m7.3GetImageContour.py12345fromPILimportImagefromPILimportImageFilterim=Image.open('birdnest
本文标题:Python教案7-1-文件和数据格式化
链接地址:https://www.777doc.com/doc-4968639 .html