资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,Python,语言编程导论,第七章 文件处理,1,内容提要,概述,文件的常见操作,目录的常见操作,2,一、概述,数据的存储可以使用数据库,也可以使用文件。,数据库保持了数据的完整性和关联性,且使用数据更安全、可靠。使用文件存储数据则非常简单、易用,不必安装数据库管理系统等运行环境。,文件通常用于存储应用软件的参数或临时性数据,是一个命名的比特集合,存储在硬盘、,U,盘、闪存条等辅助存储设备中。,文件分为两类:文本文件和二进制文件。,Python,提供了,os,、,os.path,、,shutil,等模块处理文件。,3,文本文件的特点:,基本是字符串。,Python,源代码文件和,HTML,文件等都属于文本文件。,可使用任何文本编辑器进行编辑,对人来说相对容易阅读和修改。,对程序来说,无法直接阅读文本文件。通常,每种文本文件都需要使用相应的分析程序来阅读,例如,,Python,使用专用分析程序来帮助阅读,.py,文件,而要阅读,HTML,文件,需要使用专用于,HTML,的分析程序。,通常比等价的二进制文件大。需要通过网络发送大型文本文件时,一般要进行压缩(如压缩成,zip,格式),以提高传输速度和节省磁盘空间。,4,二进制文件的特点:,通常是人无法直接阅读的,且使用常规的文本编辑器无法查看。在文本编辑器中打开二进制文件时,显示的是一堆乱码。有些类型的二进制文件(如,JPEG,图像)需要使用特殊查看器显示其内容。,占据的空间通常比等价的文本文件小。,对程序来说,可以直接阅读二进制文件。虽然二进制文件各不相同,但通常无需编写复杂的分析程序来读取它们。,5,二、文件的常见操作,文件的常见操作包括:,打开文件,读写文件,复制文件,删除文件,6,1,、文件的创建,文件的打开或创建可以使用函数,open,。该函数可以指定处理模式,设置打开的文件为只读、只写或可读写状态。,格式:,open(file,mode,buffering),7,大家应该也有点累了,稍作休息,大家有疑问的,可以询问和交流,8,说明:,参数,file,是被打开的文件名。若文件,file,不存在,,open(),将创建该文件,然后再打开该文件。,参数,mode,是指文件的打开模式。打开模式如表,7-1,。,参数,buffering,设置缓存模式。,0,表示无缓冲;,1,表示行缓冲;如果大于,1,则表示缓冲区的大小,,-1,(或者任何负数)代表使用默认的缓冲区大小。以字节为单位。,open(),返回,1,个,file,对象,,file,对象可以对文件进行各种操作。,9,表,7-1,:文件的打开模式,10,关于,file,类:,file,类用于文件管理,可以对文件进行创建、打开、读写、关闭等操作。,文件的处理一般分为三个步骤:,创建并打开文件,使用,open(),函数返回,1,个,file,对象。,调用,file,对象的,read(),、,write(),等方法处理文件。,调用,close(),关闭文件,释放,file,对象占用的资源。,11,表,7-2,:,file,类的常用属性和方法,12,13,例,7-1,:文件的创建、写入和关闭,14,例,7-2,:在文件尾添加内容,15,2,、文件的读取,文件的读取有多种方法,包括:,readline(),readlines(),read(),16,(,1,)按行读取方式,readline(),readline(),每次读取文件中的一行,需要使用永真表达式循环读取文件。但当文件指针移动到文件的末尾时,依然使用,readline(),读取文件将出现错误。因此程序中需要添加,1,个判断语句,判断文件指针是否移动到文件的尾部,并且通过该语句中断循环。,17,例,7-3,:使用,readline(),读文件,执行结果:,18,(,2,)多行读取方式,函数,readlines(),可一次性读取文件中多行数据。,使用,readlines(),读取文件,需要通过循环访问,readlines(),返回的内容。,19,例,7-4,:使用,readlines(),读文件,执行结果:,20,(,3,)一次性读取方式,读取文件最简单的方法是使用,read(),,,read(),将从文件中一次性读出所有的内容,并赋值给,1,个字符串变量。,21,例,7-5,:使用,read(),读文件,执行结果:,22,例,7-6,:使用,read(),返回指定字节的内容,执行结果:,story.txt,内容:,23,3,、文件的写入,文件的写入同样有多种方法,可以使用,write(),、,writelines(),方法写入文件。,例,7-1,使用,write(),方法将字符串写入文件,而,writelines(),方法可将列表中存储的字符串序列写入文件。,24,例,7-7,:使用,writelines(),写文件,hello.txt,内容:,25,将字符串插入到文件开头:,相比在文件末尾添加字符串,将字符串写入文件开头不那么容易,因为操作系统没有提供这样的支持。,解决的方法是:将文件读取到一个字符串中,将新文本插入到该字符串,再将这个字符串写入原来的文件。,26,例,7-8,:将字符串插入到文件开头,插入字符串后的,story.txt,内容:,27,例,7-9,:,将文件,companies.txt,的字符串前加上序号,1,、,2,、,3,、,后写到另一个文件,scompanies.txt,中。,companies.txt,scompanies.txt,28,源程序:,29,4,、文件的删除,删除文件需要使用,os,模块和,os.path,模块。,os,模块提供了对系统环境、文件、目录等操作系统级的接口函数。,表,7-3,列出了,os,模块常用的文件处理函数。,注意:,os,模块的,open(),函数与内置的,open(),函数的用法不同。,30,表,7-3,:,os,模块常用的文件处理函数,31,表,7-4,:,os.path,模块常用函数,32,例,7-10,:文件的删除,33,5,、文件的复制,file,类并没有提供直接复制文件的方法,但可以使用,read(),、,write(),方法来实现复制文件的功能。,34,例,7-11,:用,read(),、,write(),实现文件复制,35,复制文件的其他方法:,shutil,模块是另一个文件、目录的管理接口,提供了一些用于复制文件、目录的函数。,其中,,copyfile(),函数可以实现文件的复制,,move(),函数可以实现文件的剪切。,copy,dst),move(src,dst),其中,参数,src,表示源文件的路径,,dst,表示目标文件的路径,均为字符串类型。,36,例,7-12,:使用,shutil,模块实现文件的复制和移动,37,6,、文件的重命名,os,模块的函数,rename(),可以对文件或目录进行重命名。,在实际应用中,经常需要将某一类文件修改为另一种类型,即修改文件的后缀名。可以通过函数,rename(),和字符串查找函数来实现。,38,例,7-13,:修改文件名,39,例,7-14,:修改后缀名,40,7,、文件内容的搜索和替换,文件内容的搜索和替换可以使用字符串查找和替换来实现。,例,7-15,:从,hello.txt,文件中统计字符串,hello,出现的次数。,41,程序及执行结果:,执行结果:,42,例,7-16,:将,hello.txt,中的字符串,hello,全部替换为,hi,,并将结果存入,hello2.txt,中,43,8,、处理二进制文件,Python,中,通常使用,pickle,模块处理二进制文件。,可以使用,pickle.dump,将数据结构存储到磁盘,之后再用,pickle.load,从磁盘获取数据结构。,pickle,不能用于读写特殊格式的二进制文件,如,GIF,文件。对这种格式的文件,必须逐字节处理。,44,例,7-17,:二进制文件存取,执行结果:,45,三、目录的常见操作,Python,的,os,模块和,os.path,模块还提供了一些针对目录操作的函数。,1,、创建目录和删除目录,os,模块提供的常用目录处理函数见表,7-4,。,46,表,7-4,:,os,模块常用目录处理函数,47,例:目录的创建和删除,48,2,、目录的遍历,目录的遍历有两种实现方法:,递归函数,os.walk(),49,例,7-18,:用递归函数遍历目录,d:Python34lib,50,例,7-19,:使用,os.walk(),遍历目录,51,说明:,os.walk(),返回的是一个三元组:,tupple(dirpath,dirnames,),其中第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件。,dirpath,是一个,string,,代表目录的路径;,dirnames,是一个,list,,包含了,dirpath,下所有子目录的名字;,是一个,list,,包含了非目录文件的名字。这些名字不包含路径信息,如果需要得到全路径,需要使用,os.path.join(dirpath,name).,52,3,、其他目录相关操作,返回当前目录中的文件和文件夹;,返回当前目录中的指定类型文件;,返回当前目录中所有文件的大小总和等。,53,例,7-20,:返回当前目录中的文件和文件夹,54,例,7-21,:返回当前目录或指定目录中的,.py,文件,55,
展开阅读全文