yhon电子教案文件和数据格式化_第1页
yhon电子教案文件和数据格式化_第2页
yhon电子教案文件和数据格式化_第3页
yhon电子教案文件和数据格式化_第4页
yhon电子教案文件和数据格式化_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

第7章文件和数据格式化文件的使用文件是一个存储在辅助存储器上的数据序列,可以包含任何数据内容。概念上,文件是数据的集合和抽象,类似地,函数是程序的集合和抽象。用文件形式组织和表达数据更有效也更为灵活。文件包括两种类型:文本文件和二进制文件。文本文件一般由单一特定编码的字符组成,如UTF-8编码,内容容易统一展示和阅读。大部分文本文件都可以通过文本编辑软件或文字处理软件创建、修改和阅读。由于文本文件存在编码,所以,它也可以被看作是存储在磁盘上的长字符串,例如一个txt格式的文本文件。文件概述二进制文件直接由比特0和比特1组成,没有统一字符编码,文件内部数据的组织格式与文件用途有关。二进制是信息按照非字符但特定格式形成的文件,例如,png格式的图片文件、avi格式的视频文件。二进制文件和文本文件最主要的区别在于是否有统一的字符编码。二进制文件由于没有统一字符编码,只能当作字节流,而不能看作是字符串。无论文件创建为文本文件或者二进制文件,都可以用“文本文件方式”和“二进制文件方式”打开,但打开后的操作不同。文件概述微实例7.1:理解文本文件和二进制文件的区别。首先,用文本编辑器生成一个包含“中国是个伟大国家!”的txt格式文本文件,命名为7.1.txt。分别用文本文件方式和二进制文件方式读入,并打印输出效果,代码如下:文件概述

输出结果为:可以看到,采用文本方式读入文件,文件经过编码形成字符串,打印出有含义的字符;采用二进制方式打开文件,文件被解析为字节(byte)流。由于存在编码,字符串中的一个字符由2个字节表示。文件概述Python对文本文件和二进制文件采用统一的操作步骤,即“打开-操作-关闭”,如图7.1所示。文件的打开关闭操作系统中的文件默认处于存储状态,首先需要将其打开,使得当前程序有权操作这个文件,打开不存在的文件可以创建文件。打开后的文件处于占用状态,此时,另一个进程不能操作这个文件。可以通过一组方法读取文件的内容或向文件写入内容,此时,文件作为一个数据对象存在,采用<a>.<b>()方式进行操作。操作之后需要将文件关闭,关闭将释放对文件的控制使文件恢复存储状态,此时,另一个进程将能够操作这个文件。文件的打开关闭Python通过解释器内置的open()函数打开一个文件,并实现该文件与一个程序变量的关联,open()函数格式如下:<变量名>=open(<文件名>,<打开模式>)

open()函数有两个参数:文件名和打开模式。文件名可以是文件的实际名字,也可以是包含完整路径的名字

文件的打开关闭

打开模式用于控制使用何种方式打开文件,open()函数提供7种基本的打开模式,如表7.1所示

文件的打开关闭打开模式含义'r'只读模式,如果文件不存在,返回异常FileNotFoundError,默认值'w'覆盖写模式,文件不存在则创建,存在则完全覆盖源文件'x'创建写模式,文件不存在则创建,存在则返回异常FileExistsError'a'追加写模式,文件不存在则创建,存在则在原文件最后追加内容'b'二进制文件模式't'文本文件模式,默认值'+'与r/w/x/a一同使用,在原功能基础上增加同时读写功能打开模式式使用字字符串方方式表示示,根据据字符串串定义,,单引号号或者双双引号均均可。上上述打开开模式中中,‘r’、‘w’、‘x’、‘b’可以和‘b’、‘t’、‘+’组合使用用,形成成既表达达读写又又表达文文件模式式的方式式。例如,open()函数默认认采用'rt'(文本只读读)模式,读读入程序序所在目目录中7.1.txt文件:textfile=open('7.1.txt','r')或textfile=open('7.1.txt')读取一个个二进制制文件,,如一个个图片、、一段视视频或者者一段音音乐文件件,需要要使用文文件打开开模式'rb'。例如,,打开一一个名为为'music.mp3'的音频文文件:binfile=open('music.mp3','rb')文件使用用结束后后要用close()方法关闭闭,释放放文件的的使用授授权,该该方法的的使用方方式如下下:<变量名>.close()文件的打打开关闭闭当文件被被打开后后,根据据打开方方式不同同可以对对文件进进行相应应的读写写操作。。注意,,当文件件以文本本文件方方式打开开时,读读写按照照字符串串方式,,采用当当前计算算机上使使用的编编码或指指定编码码;当文文件以二二进制文文件方式式打开时时,读写写按照字字节流方方式。Python提供4个常用的的文件内内容读取取方法文件的读读写方法含义<file>.readall()读入整个文件内容,返回一个字符串或字节流*<file>.read(size=-1)从文件中读入整个文件内容,如果给出参数,读入前size长度的字符串或字节流<file>.readline(size=-1)从文件中读入一行内容,如果给出参数,读入该行前size长度的字符串或字节流<file>.readlines(hint=-1)从文件中读入所有行,以每行为元素形成一个列表,如果给出参数,读入hint行微实例7.2:文本文文件逐行行打印。。用户输入入文件路路径,以以文本文文件方式式读入文文件内容容并逐行行打印,,代码如如下:程序首先先提示用用户输入入一个文文件名,,然后打打开文件件并赋值值给文件件对象变变量fo。文件的的全部内内容通过过fo.readlines()方法读入入到一个个列表中中,列表表的每个个元素是是文件一一行的内内容,然然后通过过for……in方式遍历历列表,,处理每每行内容容。文件的读读写上述代码码尽管完完成了微微实例7.2的要求,,但存在在一些缺缺点:当当读入文文件非常常大时,,一次性性将内容容读取到到列表中中会占用用很多内内存,影影响程序序执行速速度。一一个合理理的方法法是逐行行读入内内容到内内存,并并逐行处处理。这这可以通通过一个个简单的的方法解解决。Python将文件本本身作为为一个行行序列,,遍历文文件的所所有行可可以直接接这样完完成文件的读读写如果程序序需要逐逐行处理理文件内内容,建建议采用用上述代代码中2-5行组成的的格式,,如下::fo=open(fname,"r")forlineinfo:#处理一行行数据fo.close()文件的读读写Python提供3个与文件件内容写写入有关关的方法法,如表表7.3所示。微实例7.3:向文件件写入一一个列表表。向文件写写一个列列表类型型,并打打印输出出结果,,代码如如下:文件的的读写写方法含义<file>.write(s)向文件写入一个字符串或字节流<file>.writelines(lines)将一个元素为字符串的列表写入文件<file>.seek(offset)改变当前文件操作指针的位置,offset的值:0:文件开头;1:当前位置;2:文件结尾文件的的读写写>>>请输入要写入的文件:test.txt>>>

>>>请输入入要写写入的的文件件:test.txt>>>可以看看到,,程序序并没没有输输出写写入的的列表表内容容。在在WriteFileAList1.py程序同同目录录找到到test.txt文件,,打开开可以以看到到其中中的内内容是是:列表ls内容被被写入入文件件,但但为何何5-7行代码码没有有将这这些内内容打打印出出来呢呢?这这是因因为文文件写写入内内容后后,当当前文文件操操作指指针在在写入入内容容的后后面,,5-7行代码码从这这个指指针开开始向向后读读入并并打印印内容容,被被写入入的内内容却却在指指针前前面,,因此此未能能被打打印出出来。。为此此,可可以在在写入入文件件后增增加一一条代代码fo.seek(0)将文件件操作作指针针返回回到文文件开开始,,即可可显示示写入入的内内容,,代码码如下下。文件的的读写写唐诗宋词元曲程序执执行结结果如如下::文件的的读写写>>>请输入要写入的文件:test.txt唐诗宋词元曲PIL库的使使用PIL(PythonImageLibrary)库是是Python语言的的第三三方库库,需需要通通过pip工具安安装,,Python安装第第三方方库的的详细细方法法请见见8.6节。安安装PIL库的方方法如如下,,需要要注意意,安安装库库的名名字是是pillow。PIL库支持持图像像存储储、显显示和和处理理,它它能够够处理理几乎乎所有有图片片格式式,可可以完完成对对图像像的缩缩放、、剪裁裁、叠叠加以以及向向图像像添加加线条条、图图像和和文字字等操操作。。PIL库概述述:\>pipinstallpillow#或者pip3installpillowPIL库主要要可以以完成成图像像归档档和图图像处处理两两方面面功能能需求求:图像归归档::对图图像进进行批批处理理、生生成图图像预预览、、图像像格式式转换换等;;图像处处理::图像像基本本处理理、像像素处处理、、颜色色处理理等。。根据功功能不不同,,PIL库共包包括21个与图图片相相关的的类,,这些些类可可以被被看作作是子子库或或PIL库中的的模块块,子子库列列表如如下。。Image、ImageChops、ImageColor、ImageCrackCode、ImageDraw、ImageEnhance、ImageFile、ImageFileIO、ImageFilter、ImageFont、ImageGL、ImageGrab、Imagemath、ImageOps、ImagePalette、ImagePath、ImageQt、ImageSequence、ImageStat、ImageTk、ImageWinPIL库概述述在PIL中,任任何一一个图图像文文件都都可以以用Image对象表表示。。表7.4给出了了Image类的图图像读读取和和创建建方法法。PIL库Image类解析析方法描述Image.open(filename)根据参数加载图像文件Image.new(mode,size,color)根据给定参数创建一个新的图像Image.open(StringIO.StringIO(buffer))从字符串中获取图像Image.frombytes(mode,size,data)根据像素点data创建图像Image.verify()对图像文件完整性进行检查,返回异常通过Image打开图图像文文件时时,图图像的的栅格格数据据不会会被直直接解解码或或者加加载,,程序序只是是读取取了图图像文文件头头部的的元数数据信信息,,这部部分信信息标标识了了图像像的格格式、、颜色色、大大小等等。因因此,,打开开一个个文件件会十十分迅迅速,,与图图像的的存储储和压压缩方方式无无关。。要加载载一个个图像像文件件,最最简单单的形形式如如下,,之后后所有有操作作对im起作用用PIL库Image类解析析其中,,birdnest.jpg是一张张鸟巢巢的夜夜景图图像,,存储储在D:\pycodes目录中中,如如图7.2所示。。在使使用IDLE交互方方式处处理图图片文文件时时,建建议采采用文文件的的全路路径;;如果果使用用Python文件形形式,,建议议采用用相对对路径径,将将文件件和程程序放放到一一个目目录中中,例例如::PIL库Image类解析析Image类有4个处理理图片片的常常用属属性,,如表表7.5所示。。查看已已经读读取图图像文文件的的属性性如下下PIL库Image类解析析>>>print(im.format,im.size,im.mode)JPEG(900,598)RGB属性描述Image.format标识图像格式或来源,如果图像不是从文件读取,值是NoneImage.mode图像的色彩模式,"L"灰度图像、"RGB"真彩色图像、"CMYK"出版图像Image.size图像宽度和高度,单位是像素(px),返回值是二元元组(tuple)Image.palette调色板属性,返回一个ImagePalette类型Image还能读读取序序列类类图像像文件件,包包括GIF,FLI,FLC,TIFF等格式式文件件。open()方法打打开一一个图图像时时自动动加载载序列列中的的第一一帧,,使用用seek()和tell()方法可可以在在不同同帧之之间移移动,,如表表7.6所示。。PIL库Image类解析析方法描述Image.seek(frame)跳转并返回图像中的指定帧Image.tell()返回当前帧的序号微实例例7.1:GIF文件图图像提提取。。对一个个GIF格式动动态文文件,,提取取其中中各帧帧图像像,并并保存存为文文件。。PIL库Image类解析析微实例例7.1展示了了一种种采用用try…except编写程程序的的方法法,通通过seek()方法和和save()方法配配合提提取GIF图像格式的的每一帧,,并保存为为文件。Image类的图像转转换和保存存方法如表表7.7所示。PIL库Image类解析方法描述Image.save(filename,format)将图像保存为filename文件名,format是图片格式Image.convert(mode)使用不同的参数,转换图像为新的模式Image.thumbnail(size)创建图像的缩略图,size是缩略图尺寸的二元元组其中,save()方法有两个个参数:文文件名filename和图像格式式format。如果调用用时不指定定保存格式式,如微实例7.1,PIL将自动根据据文件名filename后缀存储图图像;如果果指定格式式,则按照照格式存储储。搭配采用open()和save()方法可以实实现图像的的格式转换换,例如,,将png格式转换为为jpg格式,代码码如下。需需要注意,,Image类的save()方法主要用用于保存文文件到硬盘盘,PIL库还提供了了功能更强强的格式转转换方法PIL库Image类解析

12im=Image.open("birdnest.jpg")im.save("birdnest.png")

生成"birdnest.jpg"图像的缩略略图,代码码如下(续续上一个IDLE指令),鸟鸟巢图片及及其缩略图图如图7.2所示。其中中(128,128)是缩略图图的尺寸。。PIL库Image类解析>>>im.thumbnail((128,128))>>>im.save("birdnestTN","JPEG")北京鸟巢图图片及其缩缩略图Image类可以缩放放和旋转图图像,方法法如表7.8所示,其中中,rotate()方法以逆时时针旋转的的角度值作作为参数来来旋转图像像。PIL库Image类解析方法描述Image.resize(size)按size大小调整图像,生成副本Image.rotate(angle)按angle角度旋转图像,生成副本Image类能够对每每个像素点点或者一幅幅RGB图像的每个个通道单独独进行操作作,如表7.9所示。split()方法能够将将RGB图像各颜色色通道提取取出来,merge()方法能够将将各独立通通道再合成成一幅新的的图像。PIL库Image类解析方法描述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*alpha微实例7.2:图像的颜颜色交换。。交换图像中中的颜色。。可以通过过分离RGB图片的三个个颜色通道道实现颜色色交换。代代码如下,,程序执行行效果如图图7.3所示,夜色色下的北京京鸟巢变成成了蓝色!!PIL库Image类解析PIL库Image类解析被改变颜色色的北京鸟鸟巢图片操作图像的的每个像素素点需要通通过函数实实现,采用用lambda函数和point()方法搭配使使用,例子子如下,显显示效果如如图7.4所示PIL库Image类解析PIL库Image类解析去掉光线的的北京鸟巢巢图片PIL库的ImageFilter类和ImageEnhance类提供了过过滤和增强强的方法。。ImageFilter类共提供10种预定义图图像过滤方方法,如表表7.10所示。图像的过滤滤和增强方法表示描述ImageFilter.BLUR图像的模糊效果ImageFilter.CONTOUR图像的轮廓效果ImageFilter.DETAIL图像的细节效果ImageFilter.EDGE_ENHANCE图像的边界加强效果Im

温馨提示

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

评论

0/150

提交评论