版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
会计学1Python电子文件和数据格式化文件的使用第1页/共43页文件是一个存储在辅助存储器上的数据序列,可以包含任何数据内容。概念上,文件是数据的集合和抽象,类似地,函数是程序的集合和抽象。用文件形式组织和表达数据更有效也更为灵活。文件包括两种类型:文本文件和二进制文件。文本文件一般由单一特定编码的字符组成,如UTF-8编码,内容容易统一展示和阅读。大部分文本文件都可以通过文本编辑软件或文字处理软件创建、修改和阅读。由于文本文件存在编码,所以,它也可以被看作是存储在磁盘上的长字符串,例如一个txt格式的文本文件。文件概述第2页/共43页二进制文件直接由比特0和比特1组成,没有统一字符编码,文件内部数据的组织格式与文件用途有关。二进制是信息按照非字符但特定格式形成的文件,例如,png格式的图片文件、avi格式的视频文件。二进制文件和文本文件最主要的区别在于是否有统一的字符编码。二进制文件由于没有统一字符编码,只能当作字节流,而不能看作是字符串。无论文件创建为文本文件或者二进制文件,都可以用“文本文件方式”和“二进制文件方式”打开,但打开后的操作不同。文件概述第3页/共43页微实例7.1:理解文本文件和二进制文件的区别。首先,用文本编辑器生成一个包含“中国是个伟大国家!”的txt格式文本文件,命名为7.1.txt。分别用文本文件方式和二进制文件方式读入,并打印输出效果,代码如下:文件概述
第4页/共43页输出结果为:可以看到,采用文本方式读入文件,文件经过编码形成字符串,打印出有含义的字符;采用二进制方式打开文件,文件被解析为字节(byte)流。由于存在编码,字符串中的一个字符由2个字节表示。文件概述第5页/共43页Python对文本文件和二进制文件采用统一的操作步骤,即“打开-操作-关闭”,如图7.1所示。文件的打开关闭第6页/共43页操作系统中的文件默认处于存储状态,首先需要将其打开,使得当前程序有权操作这个文件,打开不存在的文件可以创建文件。打开后的文件处于占用状态,此时,另一个进程不能操作这个文件。可以通过一组方法读取文件的内容或向文件写入内容,此时,文件作为一个数据对象存在,采用<a>.<b>()方式进行操作。操作之后需要将文件关闭,关闭将释放对文件的控制使文件恢复存储状态,此时,另一个进程将能够操作这个文件。文件的打开关闭第7页/共43页Python通过解释器内置的open()函数打开一个文件,并实现该文件与一个程序变量的关联,open()函数格式如下:<变量名>=open(<文件名>,<打开模式>)
open()函数有两个参数:文件名和打开模式。文件名可以是文件的实际名字,也可以是包含完整路径的名字
文件的打开关闭第8页/共43页
打开模式用于控制使用何种方式打开文件,open()函数提供7种基本的打开模式,如表7.1所示
文件的打开关闭打开模式含义'r'只读模式,如果文件不存在,返回异常FileNotFoundError,默认值'w'覆盖写模式,文件不存在则创建,存在则完全覆盖源文件'x'创建写模式,文件不存在则创建,存在则返回异常FileExistsError'a'追加写模式,文件不存在则创建,存在则在原文件最后追加内容'b'二进制文件模式't'文本文件模式,默认值'+'与r/w/x/a一同使用,在原功能基础上增加同时读写功能第9页/共43页打开模式使用字符串方式表示,根据字符串定义,单引号或者双引号均可。上述打开模式中,‘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()文件的打开关闭第10页/共43页
当文件被打开后,根据打开方式不同可以对文件进行相应的读写操作。注意,当文件以文本文件方式打开时,读写按照字符串方式,采用当前计算机上使用的编码或指定编码;当文件以二进制文件方式打开时,读写按照字节流方式。
Python提供4个常用的文件内容读取方法
文件的读写方法含义<file>.readall()读入整个文件内容,返回一个字符串或字节流*<file>.read(size=-1)从文件中读入整个文件内容,如果给出参数,读入前size长度的字符串或字节流<file>.readline(size=-1)从文件中读入一行内容,如果给出参数,读入该行前size长度的字符串或字节流<file>.readlines(hint=-1)从文件中读入所有行,以每行为元素形成一个列表,如果给出参数,读入hint行第11页/共43页微实例7.2:文本文件逐行打印。用户输入文件路径,以文本文件方式读入文件内容并逐行打印,代码如下:程序首先提示用户输入一个文件名,然后打开文件并赋值给文件对象变量fo。文件的全部内容通过fo.readlines()方法读入到一个列表中,列表的每个元素是文件一行的内容,然后通过for…in方式遍历列表,处理每行内容。文件的读写第12页/共43页
上述代码尽管完成了微实例7.2的要求,但存在一些缺点:当读入文件非常大时,一次性将内容读取到列表中会占用很多内存,影响程序执行速度。一个合理的方法是逐行读入内容到内存,并逐行处理。这可以通过一个简单的方法解决。Python将文件本身作为一个行序列,遍历文件的所有行可以直接这样完成
文件的读写第13页/共43页如果程序需要逐行处理文件内容,建议采用上述代码中2-5行组成的格式,如下:fo=open(fname,"r")forlineinfo:#处理一行数据fo.close()文件的读写第14页/共43页Python提供3个与文件内容写入有关的方法,如表7.3所示。微实例7.3:向文件写入一个列表。向文件写一个列表类型,并打印输出结果,代码如下:文件的读写方法含义<file>.write(s)向文件写入一个字符串或字节流<file>.writelines(lines)将一个元素为字符串的列表写入文件<file>.seek(offset)改变当前文件操作指针的位置,offset的值:0:文件开头;1:当前位置;2:文件结尾第15页/共43页文件的读写>>>请输入要写入的文件:test.txt>>>
>>>请输入要写入的文件:test.txt>>>
第16页/共43页可以看到,程序并没有输出写入的列表内容。在WriteFileAList1.py程序同目录找到test.txt文件,打开可以看到其中的内容是:列表ls内容被写入文件,但为何5-7行代码没有将这些内容打印出来呢?这是因为文件写入内容后,当前文件操作指针在写入内容的后面,5-7行代码从这个指针开始向后读入并打印内容,被写入的内容却在指针前面,因此未能被打印出来。为此,可以在写入文件后增加一条代码fo.seek(0)将文件操作指针返回到文件开始,即可显示写入的内容,代码如下。文件的读写唐诗宋词元曲第17页/共43页程序执行结果如下:文件的读写>>>请输入要写入的文件:test.txt唐诗宋词元曲第18页/共43页PIL库的使用第19页/共43页PIL(PythonImageLibrary)库是Python语言的第三方库,需要通过pip工具安装,Python安装第三方库的详细方法请见8.6节。安装PIL库的方法如下,需要注意,安装库的名字是pillow。PIL库支持图像存储、显示和处理,它能够处理几乎所有图片格式,可以完成对图像的缩放、剪裁、叠加以及向图像添加线条、图像和文字等操作。PIL库概述:\>pipinstallpillow#或者pip3installpillow第20页/共43页PIL库主要可以完成图像归档和图像处理两方面功能需求:图像归档:对图像进行批处理、生成图像预览、图像格式转换等;图像处理:图像基本处理、像素处理、颜色处理等。根据功能不同,PIL库共包括21个与图片相关的类,这些类可以被看作是子库或PIL库中的模块,子库列表如下。Image、ImageChops、ImageColor、ImageCrackCode、ImageDraw、ImageEnhance、ImageFile、ImageFileIO、ImageFilter、ImageFont、ImageGL、ImageGrab、Imagemath、ImageOps、ImagePalette、ImagePath、ImageQt、ImageSequence、ImageStat、ImageTk、ImageWinPIL库概述第21页/共43页在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()对图像文件完整性进行检查,返回异常第22页/共43页通过Image打开图像文件时,图像的栅格数据不会被直接解码或者加载,程序只是读取了图像文件头部的元数据信息,这部分信息标识了图像的格式、颜色、大小等。因此,打开一个文件会十分迅速,与图像的存储和压缩方式无关。要加载一个图像文件,最简单的形式如下,之后所有操作对im起作用
PIL库Image类解析第23页/共43页其中,birdnest.jpg是一张鸟巢的夜景图像,存储在D:\pycodes目录中,如图7.2所示。在使用IDLE交互方式处理图片文件时,建议采用文件的全路径;如果使用Python文件形式,建议采用相对路径,将文件和程序放到一个目录中,例如:PIL库Image类解析第24页/共43页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类型第25页/共43页Image还能读取序列类图像文件,包括GIF,FLI,FLC,TIFF等格式文件。open()方法打开一个图像时自动加载序列中的第一帧,使用seek()和tell()方法可以在不同帧之间移动,如表7.6所示。PIL库Image类解析方法描述Image.seek(frame)跳转并返回图像中的指定帧Image.tell()返回当前帧的序号第26页/共43页微实例7.1:GIF文件图像提取。对一个GIF格式动态文件,提取其中各帧图像,并保存为文件。PIL库Image类解析第27页/共43页
微实例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是缩略图尺寸的二元元组第28页/共43页
其中,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")
第29页/共43页生成"birdnest.jpg"图像的缩略图,代码如下(续上一个IDLE指令),鸟巢图片及其缩略图如图7.2所示。其中(128,128)是缩略图的尺寸。PIL库Image类解析>>>im.thumbnail((128,128))>>>im.save("birdnestTN","JPEG")北京鸟巢图片及其缩略图第30页/共43页Image类可以缩放和旋转图像,方法如表7.8所示,其中,rotate()方法以逆时针旋转的角度值作为参数来旋转图像。PIL库Image类解析方法描述Image.resize(size)按size大小调整图像,生成副本Image.rotate(angle)按angle角度旋转图像,生成副本第31页/共43页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第32页/共43页微实例7.2:图像的颜色交换。
交换图像中的颜色。可以通过分离RGB图片的三个颜色通道实现颜色交换。代码如下,程序执行效果如图7.3所示,夜色下的北京鸟巢变成了蓝色!PIL库Image类解析第33页/共43页PIL库Image类解析被改变颜色的北京鸟巢图片
第34页/共43页
操作图像的每个像素点需要通过函数实现,采用lambda函数和point()方法搭配使用,例子如下,显示效果如图7.4所示
PIL库Image类解析第35页/共43页PIL库Image类解析去掉光线的北京鸟巢图片
第36页/共43页PIL库的ImageFilter类和ImageEnhance类提供了过滤和增强的方法。ImageFilter类共提供10种预定义图像过滤方法,如表7.10所示。图像的过滤和增强方法表示描述ImageFilter.BLUR图像的模糊效果ImageFilter.CONTOUR图像的轮廓效果ImageFilter.DETAIL图像的细节效果ImageFilter.EDGE_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年版:企业间短期资金互助协议书3篇
- 2024年气体供气新协议3篇
- 北师大版四年级上册数学第三单元 乘法 测试卷及参考答案(巩固)
- 工地建筑材料采购协议(33篇)
- 部编版2023-2024学年四年级上册语文期末核心素养评价试卷(含答案)
- 设备品质保证书模板
- 诚信无罪保证书
- 详解劳务分包结算单编制要点
- 财务代理费用协议
- 质量与安全同行各类安全保证书
- 2024企业所得税培训
- 5.5 跨学科实践:制作望远镜到西安 八年级物理上册人教版2024
- 医院改扩建工程可行性研究报告(论证后)
- 2024水样采集与保存方法
- 借款协议(父母借款给子女买房协议)(二篇)
- 糖尿病患者体重管理专家共识(2024年版)解读
- 4D厨房区域区间管理责任卡
- 针灸推拿学专业大学生职业生涯规划书
- 设备故障报修维修记录单
- 发展经济学-马春文主编-课后习题集答案解析
- EDTA标准溶液的标定和水的硬度测定实验报告
评论
0/150
提交评论