python文件和数据格式化(PPT79页)

上传人:人*** 文档编号:592858385 上传时间:2024-09-23 格式:PPT 页数:79 大小:2.18MB
返回 下载 相关 举报
python文件和数据格式化(PPT79页)_第1页
第1页 / 共79页
python文件和数据格式化(PPT79页)_第2页
第2页 / 共79页
python文件和数据格式化(PPT79页)_第3页
第3页 / 共79页
python文件和数据格式化(PPT79页)_第4页
第4页 / 共79页
python文件和数据格式化(PPT79页)_第5页
第5页 / 共79页
点击查看更多>>
资源描述

《python文件和数据格式化(PPT79页)》由会员分享,可在线阅读,更多相关《python文件和数据格式化(PPT79页)(79页珍藏版)》请在金锄头文库上搜索。

1、Python语言程序设计第7章文件和数据格式化文件的使用数据源文件概述文件是一个存储在辅助存储器上的数据序列,可以包含任何数据内容。概念上,文件是数据的集合和抽象,类似地,函数是程序的集合和抽象。用文件形式组织和表达数据更有效也更为灵活。文件包括两种类型:文本文件和二进制文件。文件概述二进制文件直接由比特0和比特1组成,没有统一字符编码,文件内部数据的组织格式与文件用途有关。二进制文件和文本文件最主要的区别在于是否有统一的字符编码无论文件创建为文本文件或者二进制文件,都可以用“文本文件方式”和“二进制文件方式”打开,打开后的操作不同。文件概述微微实例例7.1:理解文本文件和二:理解文本文件和二

2、进制文件的区制文件的区别。微实例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()文件概述输出结果为:中国是个伟大的国家!bxd6xd0xb9xfaxcaxc7xb8xf6xcexb0xb4xf3xb5xc4xb9xfaxbcxd2xa3xa1采用文本方式读入文

3、件,文件经过编码形成字符串,打印出有含义的字符;采用二进制方式打开文件,文件被解析为字节(byte)流。由于存在编码,字符串中的一个字符由2个字节表示。文件的打开关闭Python对文本文件和二进制文件采用统一的操作步骤,即“打开-操作-关闭”文件的打开关闭Python通过解释器内置的open()函数打开一个文件,并实现该文件与一个程序变量的关联,open()函数格式如下:=open(,)open()函数有两个参数:文件名和打开模式。文件名可以是文件的实际名字,也可以是包含完整路径的名字文件的打开关闭open()函数提供7种基本的打开模式打开模式含义r只读模式,如果文件不存在,返回异常FileN

4、otFoundError,默认值w覆盖写模式,文件不存在则创建,存在则完全覆盖源文件x创建写模式,文件不存在则创建,存在则返回异常FileExistsErrora追加写模式,文件不存在则创建,存在则在原文件最后追加内容b二进制文件模式t文本文件模式,默认值+与r/w/x/a一同使用,在原功能基础上增加同时读写功能文件的读写根据打开方式不同可以对文件进行相应的读写操作,Python提供4个常用的文件内容读取方法方法含义.readall()读入整个文件内容,返回一个字符串或字节流*.read(size=-1)从文件中读入整个文件内容,如果给出参数,读入前size长度的字符串或字节流.readlin

5、e(size = -1)从文件中读入一行内容,如果给出参数,读入该行前size长度的字符串或字节流.readlines(hint=-1)从文件中读入所有行,以每行为元素形成一个列表,如果给出参数,读入hint行文件的读写微微实实例例7.2:文本文件逐行打印:文本文件逐行打印微实例7.2m7.2PrintFilebyLines.py12345fname=input(请输请输入要打开的文件入要打开的文件:)fo=open(fname,r)forlineinfo.readlines():print(line)fo.close()文件的读写遍历文件的所有行可以直接这样完成12345fname=inpu

6、t(请输请输入要打开的文件入要打开的文件:)fo=open(fname,r)forlineinfo:print(line)fo.close()文件的读写如果程序需要逐行处理文件内容,建议采用上述代码格式:fo=open(fname,r)forlineinfo:#处理一行数据fo.close()文件的读写Python提供3个与文件内容写入有关的方法,如表所示。方法含义.write(s)向文件写入一个字符串或字节流.writelines(lines)将一个元素为字符串的列表写入文件.seek(offset)改变当前文件操作指针的位置,offset的值:0:文件开头; 1: 当前位置; 2: 文件结

7、尾文件的读写微实例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库

8、支持图像存储、显示和处理,它能够处理几乎所有图片格式,可以完成对图像的缩放、剪裁、叠加以及向图像添加线条、图像和文字等操作。PIL库概述PIL库可以完成图像归档和图像处理两方面功能需求:图像归档:对图像进行批处理、生成图像预览、图像格式转换等;图像处理:图像基本处理、像素处理、颜色处理等。PIL库Image类解析在PIL中,任何一个图像文件都可以用Image对象表示Image类的图像读取和创建方法。方法描述Image.open(filename)根据参数加载图像文件Image.new(mode,size,color)根据给定参数创建一个新的图像Image.open(StringIO.Strin

9、gIO(buffer)从字符串中获取图像Image.frombytes(mode,size,data)根据像素点data创建图像Image.verify()对图像文件完整性进行检查,返回异常PIL库Image类解析要加载一个图像文件,最简单的形式如下,之后所有操作对im起作用fromPILimportImageim=Image.open(D:pycodesbirdnest.jpg)PIL库Image类解析Image类有4个处理图片的常用属性 属性描述Image.format标识图像格式或来源,如果图像不是从文件读取,值是NoneImage.mode图像的色彩模式,L灰度图像、RGB真彩色图像、

10、CMYK出版图像Image.size图像宽度和高度,单位是像素(px),返回值是二元元组(tuple)Image.palette调色板属性,返回一个ImagePalette类型PIL库Image类解析微实例7.1:GIF文件图像提取。对一个GIF格式动态文件,提取其中各帧图像,并保存为文件。微实例7.1m7.1GifExtractor.py 123456789fromPILimportImageim=Image.open(pybit.gif)#读读入一个入一个GIF文件文件try:im.save(picframe:02d.png.format(im.tell()whileTrue:im.see

11、k(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)是缩略图的

12、尺寸。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()方法能够将各独立通道再合成一幅新的图像。方法描述I

13、mage.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.py12345f

14、romPILimportImageim=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:pycodesbirdnest.jpg)#打开打开鸟鸟巢文件巢文件r,g,b=im.split()#获获得得RGB通道数据通道数据newg=g.point(lam

15、bdai:i*0.9)#将将G通道通道颜颜色色值变为值变为原来的原来的0.9倍倍newb=b.point(lambdai:iom=Image.merge(im.mode,(r,newg,newb)#将将3个通道合形成新个通道合形成新图图像像om.save(D:pycodesbirdnestMerge.jpg)#输输出出图图片片PIL库Image类解析去掉光线的北京鸟巢图片 图像的过滤和增强PIL库的ImageFilter类和ImageEnhance类提供了过滤图像和增强图像的方法,共10种方法表示描述ImageFilter.BLUR图像的模糊效果ImageFilter.CONTOUR图像的轮廓

16、效果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(Ima

17、geFilter.fuction)微实例7.3:图像的轮廓获取。获取图像的轮廓,北京鸟巢变得更加抽象、更具想象空间!图像的过滤和增强微实例7.3m7.3GetImageContour.py12345fromPILimportImagefromPILimportImageFilterim=Image.open(birdnest.jpg)om=im.filter(ImageFilter.CONTOUR)om.save(birdnestContour.jpg)北京北京鸟巢巢图片的片的轮廓效果廓效果 图像的过滤和增强ImageEnhance类提供了更高级的图像增强需求,它提供调整色彩度、亮度、对比度、

18、锐化等功能。方法描述ImageEnhance.enhance(factor)对选择属性的数值增强factor倍ImageEnhance.Color(im)调整图像的颜色平衡ImageEnhance.Contrast(im)调整图像的对比度ImageEnhance.Brightness(im)调整图像的亮度ImageEnhance.Sharpness(im)调整图像的锐度图像的过滤和增强微实例7.4:图像的对比度增强。增强图像的对比度为初始的20倍。微实例7.4m7.4EnImageContrast.py12345fromPILimportImagefromPILimportImageEnhan

19、ceim=Image.open(birdnest.jpg)om=ImageEnhance.Contrast(im)om.enhance(20).save(birdnestEnContrast.jpg)图像的过滤和增强北京鸟巢图片的20倍对比度增强效果图像字符画绘制图像字符画绘制位图图片是由不同颜色像素点组成的规则分布,如果采用字符串代替像素,图像就成为了字符画。定义一个字符集,将这个字符集替代图像中的像素点。12ascii_char=list($B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjf1234568795t/|()1?-_+i!;:,.)图像字符画绘制1234

20、56defget_char(r,b,g,alpha=256):ifalpha=0:returngray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)unit=256/len(ascii_char)returnascii_chargray/unit定义彩色向灰度的转换公式如下,其中R、G、B分别是像素点的RGB颜色值:Gray=R*0.2126+G*0.7152+B*0.0722因此,像素的RGB颜色值与字符集的对应函数如下:实例代码12.1e12.DrawCharImage.py12345678910111213141516171819202122#e

21、12.1DrawCharImage.py.pyfromPILimportImageascii_char=list($%_&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1?-/+i!;:,.)defget_char(r,b,g,alpha=256):ifalpha=0:returngray=int(0.2126*r+0.7152*g+0.0722*b)unit=256/len(ascii_char)returnascii_charint(gray/unit)defmain():im=Image.open(pic.jpg)WIDTH,HEIGHT=100,60im=

22、im.resize(WIDTH,HEIGHT)txt=foriinrange(HEIGHT):forjinrange(WIDTH):txt+=get_char(*im.getpixel(j,i)txt+=nfo=open(pic_char.txt,w)fo.write(txt)fo.close()main()图像字符画绘制一二维数据格式化和处理数据组织的维度一维数据由对等关系的有序或无序数据构成,采用线性方式组织,对应于数学中的数组和集合等概念。中国、美国、日本、德国、法国、英国、意大利、加拿大、俄罗斯、欧盟、澳大利亚、南非、阿根廷、巴西、印度、印度尼西亚、墨西哥、沙特阿拉伯、土耳其、韩国数据

23、组织的维度二维数据,也称表格数据,由关联关系数据构成,采用表格方式组织,对应于数学中的矩阵,常见的表格都属于二维数据。城市环比同比定基北京101.5120.7121.4上海101.2127.3127.8广州101.3119.4120.0深圳102.0140.9145.5沈阳100.1101.4101.6环比:上月=100;同比:上年同月=100;定基:2015年=100。数据组织的维度高维数据由键值对类型的数据构成,采用对象方式组织,属于整合度更好的数据组织方式。高维数据在网络系统中十分常用,HTML、XML、JSON等都是高维数据组织的语法结构。数据组织的维度本书作者:姓氏:嵩,名字:天,单

24、位:北京理工大学,姓氏:礼,名字:欣,单位:北京理工大学,姓氏:黄,名字:天羽,单位:北京理工大学一二维数据的存储格式一维数据是最简单的数据组织类型,有多种存储格式,常用特殊字符分隔:(1)用一个或多个空格分隔,例如:中国美国日本德国法国英国意大利(2)用逗号分隔,例如:中国,美国,日本,德国,法国,英国,意大利(3)用其他符号或符号组合分隔,建议采用不出现在数据中的特殊符号中国;美国;日本;德国;法国;英国;意大利一二维数据的存储格式逗号分割数值的存储格式叫做CSV格式(Comma-SeparatedValues,即逗号分隔值),它是一种通用的、相对简单的文件格式,在商业和科学上广泛应用,尤

25、其应用在程序之间转移表格数据。一二维数据的存储格式该格式的应用有一些基本规则,如下:(1)纯文本格式,通过单一编码表示字符;(2)以行为单位,开头不留空行,行之间没有空行;(3)每行表示一个一维数据,多行表示二维数据;(4)以逗号分隔每列数据,列数据为空也要保留逗号;(5)可以包含或不包含列名,包含时列名放置在文件第一行。一二维数据的存储格式二维数据采用CSV存储后的内容如下: 城市,环比,同比,定基北京,101.5,120.7,121.4上海,101.2,127.3,127.8广州,101.3,119.4,120深圳,102,140.9,145.5沈阳,100.1,101.4,101.6CS

26、V格式存储的文件一般采用.csv为扩展名,可以通过Windows平台上的记事本或微软OfficeExcel工具打开,也可以在其他操作系统平台上用文本编辑工具打开。一二维数据的表示和读写CSV文件的每一行是一维数据,可以使用Python中的列表类型表示,整个CSV文件是一个二维数据,由表示每一行的列表类型作为元素,组成一个二维列表。城市,环比,同比,定基n,北京,101.5,120.7,121.4n,上海,101.2,127.3,127.8n,广州,101.3,119.4,120.0n,深圳,102.0,140.9,145.5n,沈阳,100.1,101.4,101.6n,一二维数据的表示和读写

27、需要注意,以split(,)方法从CSV文件中获得内容时,每行最后一个元素后面包含了一个换行符(n)。对于数据的表达和使用来说,这个换行符是多余的,可以通过使用字符串的replace()方法将其去掉,如第4行。一二维数据的表示和读写微微实例例7.6:逐行:逐行处理理CSV格式数据。格式数据。微实例7.6m7.6GetCSVbyLine.py12345678910fo=open(price2016.csv,r)ls=forlineinfo:line=line.replace(n,)ls=line.line.split(,)lns=forsinls:lns+=t.format(s)print(ln

28、s)fo.close()一二维数据的表示和读写运行后的输出结果如下:城市环比同比定基北京101.5120.7121.4上海101.2127.3127.8广州101.3119.4120.0深圳102.0140.9145.5沈阳100.1101.4101.6一二维数据的表示和读写微微实例例7.7:一:一维数据写入数据写入CSV文件。文件。微实例7.7m7.7WriteD1toCSV.py1234fo=open(price2016bj.csv,w)ls = 北北 京京 , 101.5, 120.7,121.4fo.write(,.join(ls)+n)fo.close()一二维数据的表示和读写对于列

29、表中存储的二维数据,可以通过循环写入一维数据的方式写入CSV文件,参考代码样式如下:forrowinls:.write(,.join(row)+n)一二维数据的表示和读写微微实例例7.8:二:二维数据写入数据写入CSV文件。文件。城市,环比,同比,定基北京,1.0%,1.2%,1.2%上海,1.0%,1.3%,1.3%广州,1.0%,1.2%,1.2%深圳,1.0%,1.4%,1.5%沈阳,1.0%,1.0%,1.0%一二维数据的表示和读写微实例7.8m7.8WriteD2toCSV.py123456789101112131415fr=open(price2016.csv,r)fw=open(

30、price2016out.csv,w)ls=forlineinfr:#将将CSV文件中的二文件中的二维维数据数据读读入到列表入到列表变变量量line=line.replace(n,)ls.append(line.split(,)foriinrange(len(ls):#遍遍历历列表列表变变量量计计算百分数算百分数forjinrange(len(lsi):iflsij.replace(.,).isnumeric():lsij=:.2%.format(float(lsij)/100)forrowinls:#将列表将列表变变量中的二位数据量中的二位数据输输出到出到CSV文件文件print(row)f

31、w.write(,.join(row)+n)fr.close()fw.close()CSV格式的HTML展示CSV格式的HTML展示文件名:CSV2HTML.html12345678910111213141516171819202016年7月部分大中城市新建住宅价格指数城市环比同比定基北京101.5120.7121.4上海101.2127.3127.8广州101.3119.4120.0深圳102.0140.9145.5沈阳100.1101.4101.6CSV格式的HTML展示实例代码13.1e13.1csv2html.py123456789101112131415#e13.1csv2html.

32、pyseg1=nnn2016年年7月部分大中城市新建住宅价格指数月部分大中城市新建住宅价格指数nseg2=nseg3=nndeffill_data(locls):seg=n.format(*locls)returnsegfr=open(price2016.csv,r)ls=CSV格式的HTML展示实例代码13.1e13.1csv2html.py1617181920212223242526272829forlineinfr:line=line.replace(n,)ls.append(line.split(,)fr.close()fw=open(price2016.html,w)fw.write

33、(seg1)fw.write(nnnn.format(*ls0)fw.write(seg2)foriinrange(len(ls)-1):fw.write(fill_data(lsi+1)fw.write(seg3)fw.close()高维数据的格式化高维数据的格式化与一维二维数据不同,高维数据能展示数据间更为复杂的组织关系。为了保持灵活性,表示高维数据不采用任何结构形式,仅采用最基本的二元关系,即键值对。万维网是高维数据最成功的典型应用。JSON格式可以对高维数据进行表达和存储。JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,易于阅读和理解。JSON格

34、式表达键值对的基本格式如下,键值对都保存在双引号中:key:value高维数据的格式化当多个键值对放在一起时,JSON有如下一些约定:数据保存在键值对中;键值对之间由逗号分隔;括号用于保存键值对数据组成的对象;方括号用于保存键值对数据组成的数组。以“本书作者”JSON数据为例。Json格式高维数据的格式化本书作者:姓氏:嵩,名字:天,单位:北京理工大学,姓氏:礼,名字:欣,单位:北京理工大学,姓氏:黄,名字:天羽,单位:北京理工大学json库的使用Json库的概述njson库主要包括两类函数:操作类函数和解析类函数操作类函数主要完成外部JSON格式和程序内部数据类型之间的转换功能解析类函数主要

35、用于解析键值对内容。Json库的解析函数描述json.dumps(obj,sort_keys=False,indent=None)将Python的数据类型转换为JSON格式,编码过程json.loads(string)将JSON格式字符串转换为Python的数据类型,解码过程json.dump(obj,fp,sort_keys=False,indent=None)与dumps()功能一致,输出到文件fpjson.load(fp)与loads()功能一致,从文件fp读入dumps()和loads()分别对应编码和解码功能。Json库的解析dt=b:2,c:4,a:6s1=json.dumps(d

36、t)#dumps返回返回JSON格式的字符串格式的字符串类类型型s2=json.dumps(dt,sort_keys=True,indent=4)print(s1)c:4,a:6,b:2print(s2)a:6,b:2,c:4print(s1=s2)Falsedt2=json.loads(s2)print(dt2,type(dt2)c:4,a:6,b:2CSV和JSON格式相互转换CSV和JSON格式相互转换CSV格式常用于一二维数据表示和存储,JSON也可以表示一二维数据。在网络信息传输中,可能需要统一表示方式,因此,需要在CSV和JSON格式间进行相互转换。同比:120.7,城市:北京,定

37、基:121.4,环比:101.5CSV和JSON格式相互转换将CSV转换成JSON格式的代码如下实例代码14.1e14.1csv2json.py12345678910111213#e14.1csv2json.pyimportjsonfr=open(price2016.csv,r)ls=forlineinfr:line=line.replace(n,)ls.append(line.split(,)fr.close()fw=open(price2016.json,w)foriinrange(1,len(ls):lsi=dict(zip(ls0,lsi)json.dump(ls1:,fw,sort_

38、keys=True,indent=4)fw.close()同比:120.7,城市:北京,定基:121.4,环比:101.5,同比:127.3,城市:上海,定基:127.8,环比:101.2,同比:119.4,城市:广州,定基:120,环比:101.3,同比:140.9,城市:深圳,定基:145.5,环比:102,同比:101.4,城市:沈阳,定基:101.6,环比:100.1,同比:,城市:,定基:,环比:将二维JSON格式数据转换成CSV格式的代码如下,供参考。实例代码14.2e14.2json2csv.py123456789101112#14.2json2csv.pyimportjsonfr=open(price2016.json,r)ls=json.load(fr)data=list(ls0.keys()foriteminls:data.append(list(item.values()fr.close()fw=open(price2016_from_json.csv,w)foritemindata:fw.write(,.join(item)+n)fw.close()

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 销售管理

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号