Python3程序设计实战教程第6讲 文件及操作_第1页
Python3程序设计实战教程第6讲 文件及操作_第2页
Python3程序设计实战教程第6讲 文件及操作_第3页
Python3程序设计实战教程第6讲 文件及操作_第4页
Python3程序设计实战教程第6讲 文件及操作_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

第6讲

文件及操作

导入在python中变量和对象存储的数据是暂时的,都在内存中,程序结束后,数据就会丢失。有些数据可能是经过较长计算得来的,如果丢失,则需要花很长时间来重新计算。长时间地保存程序中的数据,需要将程序中的数据保存到磁盘文件中。不仅仅是数据,通过序列化,我们还能将对象转换成字节序列,保存起来,再需要用时,通过反序列化还原对象。python内置了文件对象和对文件、目录进行操作的模块,通过这些模块可以方便、快捷的将数据保存到磁盘文件中,以达到长时间保存数据的目的。主要内容掌握文件的读写熟悉文件指针熟悉os及os.path模块了解pillow模块了解openpyxl模块6.1文件概述文件,即存储在计算机上的信息集合。应用程序可以通过文件共享数据。程序可以通过文件读取信息,例如文字、表格、图像、声音等信息,也可以将信息记录在文件当中储存起来。根据文件的数据组织形式,文件可以分为文本文件和二进制文件。1.文本文件文本文件存储的是普通的字符串,每个字符一般是定长的(也有不固定长度的编码utf-8),ASCII码是8个比特的编码,UNICODE一般占16个比特。基于字符,每个字符在具体编码中是固定的。文本文件可以用普通记事本或其他文本编辑器打开和编辑并且我们是能看得懂的。简单来说,文本文件是基于字符编码的文件,我们在保存或者打开文本文档时可以查看以及修改相应的编码方式。2.二进制文件

二进制文件把数据以字节串(btype)进行储存。二进制文件数据长度是灵活可变的,存储利用率要高。常见的图形图像文件、音视频文件、Office文档等都属于二进制文件。普通文本编辑器不能对二进制文件进行正常读写。简单来说二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值(可以看作是自定义编码)。我们管理存放存放文件的目录系统叫做文件夹,一般计算机采用的是树状目录结构。表示文件位置显示的一系列文件夹序列称为路径。6.2打开文件我们在操作文件之前,必须先打开文件。python中通过内建函数open打开文件,open函数成功打开文件之后会返回一个文件对象,否则引发一个错误,当操作失败的时候,会抛出异常,基本语法如下:File_object=open(file,mode='r',buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)说明:这里着重介绍file、mode、buffering和encoding参数,其余参数用的较少,同学可以通过help(open)命令查看其余参数的作用。file参数不仅可以接受字符串文件路径,还可以接受文件描述符(filedescriptor)。文件路径可以是绝对路径或者是相对路径,但建议使用绝对路径来提高程序的稳定性。mode表示为文件打开的模式,经常使用的模式有r,w,a,分别表示为读取,写入,追加,其他模式见表6-1,如果没有使用mode参数,那么默认为只读的r模式。buffering参数设置缓冲行为,它有三种模式,分别是全缓冲、行缓冲和无缓冲。当buffering=a(a为正整数但不包括1)时,表示全缓冲,当缓冲区大小达到a字节时写入磁盘。当buffering=1时,表示行缓冲,当缓冲区遇到换行符\n时写入磁盘。当buffering=0时,表示无缓冲,内容直接写入磁盘。如果没有使用buffering参数,那么默认为全缓冲。encoding参数是指明文件编码,仅适用于文本文件,如果没有使用encoding参数,默认是使用locale.getpreferredencoding()函数返回的编码方式。6.2打开文件模式描述x写模式,新建一个文件并且可以写入,如果该文件已存在则会报错。rb二进制打开只读模式。r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。r+打开一个文件用于读写。打开文件时文件指针将会放在文件的开头。不会清空原有内容,而是会在文件开头写入内容。w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被清空。如果该文件不存在,创建新文件。w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。即新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。表6-1open函数中文件打开模式6.2打开文件之前我们说到,open函数成功打开文件之后会返回一个文件对象,下面介绍文件对象的常用方法,如表6-2所示。表6-2操作文件对象的常用方法方法功能close(self)关闭文件。关闭后文件不能再进行读写操作。flush(self)刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件,而不是被动的等待输出缓冲区写入。fileno(self)返回一个整型的文件描述符(filedescriptorFD整型),可以用在如os模块的read方法等一些底层操作上。isatty(self)如果文件连接到一个终端设备返回True,否则返回False。read(self,size=-1)读取文件内容,并返回字符串/字节串对象。size为可选参数。省略size,size值为负数或者size大于文件总字符数/总字节数时读取整个文件的内容。size取其他值时读取size个字符/字节。readline(self,size=-1)读取文本直到换行符或者文本结束。size是可选参数,表示指定的字符数或者字节数。如果size大于单行字符数/字节数或为负数则最多只能读取这一行的内容。readlines(self,hint=-1)按行读取内容。默认hint=-1读取所有行并返回列表。可以指定hint来控制读取的行数:如果到目前为止所有行的总大小(以字节/字符为单位)超过了hint,将不再读取更多行。seek(self,cookie,whence=0)更改文件指针的当前位置tell(self)返回文件指针当前位置。truncate(self,pos=None)截取文件,截取的字节通过size指定,默认为当前文件位置。write(self,text)将字符串写入文件,返回的是写入的字符长度。writelines(self,lines)向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。6.3文本文件的操作1.文本文件的编码我们已经知道,文本文件是基于字符编码的文件,常用的文本文件编码格式有ANSI、UTF-16LE、UTF-16BE、UTF-8和带BOM的UTF-8等。通常,文件以文本文本模式打开,从文件中读取或者写入字符串时,都以指定编码方式进行编码。如未指定编码格式,默认值与平台相关,可以使用locale.getpreferredencoding()函数查看默认编码。在打开文本文件时需要使用正确的文件编码,如果使用的编码方式不匹配,可能就会出现解码错误问题。【例6-1】用GBK编码的方式打开GBK文本文件。>>>a=open("c:/demo.txt",'r',encoding='GBK')>>>a.read()'你好,世界'【例6-2】用utf-8编码的方式打开GBK文本文件。>>>a=open("c:/demo.txt",'r',encoding=’utf-8’)>>>a.read()Traceback(mostrecentcalllast):UnicodeDecodeError:'utf-8'codeccan'tdecodebyte0xc4inposition0:invalidcontinuationbyte6.3文本文件的操作说明1.

“c:/demo.txt”

为文件路径,‘r’

表示以只读方式打开文件,encoding=‘GBK‘

表示使用‘GBK’的方式打开文本文件。(文件路径及文本文件内如图所示)2.【例6-1】使用匹配的编码方式打开文本文件,可以正常读取文件内容。3.

【例6-2】使用不匹配的编码方式打开文本文件时,文件依旧能打开,并没有在执行open函数时报错,但在执行文件对象中的read()方法时出现了错误,可以看到用utf-8编码去解码GBK编码的文本文件,编码不匹配时,出现了UnicodeDecodeError错误。6.3文本文件的操作2.文本文件的读取python中可以使用文件对象的read、readline和readlines方法对文件内容进行读取。这些方法的用法可以参照表6-2。需要注意的是,这些方法读取的数据输出都是变为字符串的形式,如果原来的文本文件中含有数字,需要我们进行数据类型转换。下面我们通过一些具体的代码对这些方法进行演示。6.3文本文件的操作【例6-3】使用read方法读取文件内容。在文本文件read_demo.txt已有内容:’123\n123\n123’。>>>f=open('read_demo.txt')#打开文件>>>print(f.read())#参数为空,读取所有数据,返回字符串123123123>>>f.seek(0)#将文件指针定位到文件开头0>>>print(f.read(6))#读取6个字符12312#包含换行符’\n’>>>f.seek(0) 0>>>print(f.read(15))

#设置size大于文件总字符数123123123>>>f.seek(0)0>>>get=int(f.read(3)) #将字符串‘123’转为整型>>>print(get+1) #进行加法运算1246.3文本文件的操作说明1.

说明1.

read(self,

size=-1)方法功能为读取文件内容,并返回字符串/字节串对象。2.

size为可选参数。省略size,size值为负数或者size大于文件总字符数/总字节数时读取整个文件的内容。size取其他值时读取size个字符/字节。3.

seek(self,cookie,whence=0)

方法功能为改变文件指针的当前位置,在例子中通过f.seek(0),将文件指针定位到文件的开头。

6.3文本文件的操作【例6-4】使用readline方法读取文件内容。在readline_demo.txt中已有内容:’Thisisthefirstline.\nThisisthesecondline.\nThisisthethirdline.’。>>>f=open('readline_demo.txt')>>>print(f.readline())

#参数为空,第一次读取到换行符Thisisthefirstline.

>>>print(f.readline(16))Thisistheseco>>>print(f.readline())

#参数为空,读取到第二个换行符ndline.>>>print(f.readline(100))Thisisthethirdline.>>>print(f.readline())

#返回内容为空,表示到了文件末尾说明1.readline(self,size=-1)

方法功能为读取读取文本直到换行符或者文本结束。2.

size是可选参数,表示指定的字符数或者字节数。如果size大于单行字符数/字节数或为负数则最多只能读取这一行的内容。3.

readline方法从文件中读取单行数据,字符串末尾保留换行符’\n’,只要f.readline()返回空字符串,就表示已经到达了文件末尾。6.3文本文件的操作【例6-5】使用readlines方法读取文件内容。readlines_demo.txt文件中已有文本’Hello,World.\nHello,Python.\nHi,World.\nHi,Python’>>>f=open('readlines_demo.txt')>>>print(list(f))#使用list函数读取文件中的所有行并以列表形式返回['Hello,World.\n','Hello,Python.\n','Hi,World.\n','Hi,Python']>>>f.seek(0)#将文件指针定位到文件开头0>>>print(f.readlines())#参数为空,默认hint=-1读取所有行并返回列表['Hello,World.\n','Hello,Python.\n','Hi,World.\n','Hi,Python']>>>f.seek(0)0>>>print(f.readlines(6))['Hello,World.\n']#第一行的字符长度超过了6,输出第一行且将不再读取更多行>>>f.seek(0)0>>>print(f.readlines(16))#第一行的字符长度不足16,加上第二行超过16,故输出第一行和第二行内容。['Hello,World.\n','Hello,Python.\n']>>>f.seek(0)0>>>print(f.readlines(50))['Hello,World.\n','Hello,Python.\n','Hi,World.\n','Hi,Python']#hint大于所有数据的长度,输出所有数据6.3文本文件的操作说明1.

说明1.

readlines(self,hint=-1)方法功能为按行读取内容,并返回列表。2.默认hint=-1读取所有行并返回列表。可以指定hint来控制读取的行数:如果到目前为止所有行的总大小(以字节/字符为单位)超过了hint,将不再读取更多行。3.如需以列表形式读取文件中的所有行,可以用list函数或文件对象中的readlines方法。6.3文本文件的操作3.文本文件的写入python提供了两种方法让我们能够对文本进行写入,一是文件对象中的write或writelines方法,二是使用print()函数。使用write及writelines方法写入文件之前介绍的文本文件读取方法中我们有说到,read和readline返回的是一个字符串,在使用write和writelines方法写入文件时,我们需要注意的是也需要将数据转变为字符串格式才可以写入。6.3文本文件的操作(1)write方法先来看个简单例子:【例6-6】写入文本文件>>>f=open('text_demo.txt','w')>>>f.write('HelloWorld!')12>>>f.close()#关闭文件>>>f=open('text_demo.txt','r')>>>print(f.read())HelloWorld!>>>f.close()#关闭文件>>>f=open('text_demo.txt','w')#再次用'w'模式打开文件>>>f.write('HelloWorld!')#向文件中写入'HelloWorld!'12>>>f.close()#关闭文件>>>f=open('text_demo.txt','r')>>>print(f.read())HelloWorld!

说明1.使用write()方法往demo.txt中写入了“HelloWorld!”文本,关闭后又使用’r’读取,输出了“HelloWorld!”。2.用同样的方法向text_demo.txt文件中写入“HelloWorld!”并关闭,然后再次读取发现文件中依旧也只有一条“HelloWorld!”3.因为使用‘w’模式重新打开文件后,之前文件中的内容会被全部都被清空,所以如果想在不清空之前内容的基础上继续写入,那就需要用到追加模式‘a’。6.3文本文件的操作【例6-7】使用追加模式写入内容。此时text_demo.txt中已有内容'HelloWorld!'。>>>withopen('text_demo.txt','a')asf:#追加模式 f.write('HelloWorld!')

12>>>withopen('text_demo.txt','r')asf: print(f.read())

HelloWorld!HelloWorld!说明1.使用追加模式向text_demo.txt中追加“Hello

World!”2.输出文本中的内容只有一行内容,是因为我们没有加上换行符。6.3文本文件的操作(2)writelines方法由于write方法一次只能添加一个字符串,如果实现多个字符串的写入,就需要我们重复调用write方法。为了避免这种重复的麻烦,我们可以使用writelines方法将多个字符串写入文件当中去。6.3文本文件的操作【例6-8】writelines方法>>>string1='Python\n'>>>string2='Is\n'>>>string3='A\n'>>>string4='Good\n'>>>string5='Lauguage\n'>>>f=open('writelines_demo.txt','w')>>>f.writelines([string1,string2,string3,string4,string5])>>>f.close()

>>>f=open('writelines_demo.txt')>>>print(f.read())PythonIsAGoodLauguage说明1.在使用write和writelines方法向文件写入内容时python不会自动添加换行符,所以在输入的时候必须自己添加换行符’\n’。6.3文本文件的操作print函数写入文件在IDLE窗口输入help(‘print’)我们可以查看有关print函数的介绍:…print(value,...,sep='',end='\n',file=sys.stdout,flush=False)…它是我们常用的输出函数,同时也可以用来写入文件。print函数中的参数file表示我们要写入的文件,默认为标准的输出端。sep表示在值之间插入的字符串,默认为空格。end表示在最后一个值之后附加的字符串,默认为换行符。print方法支持我们往文件里写入非字符串的数据类型。6.3文本文件的操作【例6-9】使用print函数往print_demo.txt写入两句”HelloWorld!”:>>>f=open('print_demo.txt','w')>>>print('Hello,World!',file=f)>>>print('Hello,World!',file=f)>>>f.close()>>>f=open('print_demo.txt')>>>print(f.read())Hello,World!Hello,World!

说明1.我们可以看到前两个print函数在调用时是直接将内容写入文件当中,而不会将它打印出来。2.其实,print()函数还支持将多个数据一起写入文件,中间用逗号隔开,默认情况下写入文件后会自动在写入数据之间留有空格,最后会添加一个换行符,我们也可以通过sep和end参数来控制值之间的字符串以及附加字符串。6.3文本文件的操作【例6-9】使用print函数写入多条数据>>>string='Iloveyou'>>>num=1314#写入整数类型>>>f=open('demo.txt','w')>>>print(string,num,string,num,end=’?’file=f)#设置附加字符串为’?’>>>f.close()>>>f=open('demo.txt')>>>print(f.read())Iloveyou1314Iloveyou1314?

说明1.默认的分隔符为空格,所以每条数据之间由空格隔开2.附加字符串为“?”,所以在输入所有数据后再数据末尾添加了附加字符串“?”6.4文件指针文件指针之前其实已经接触过了,它与文件的读写操作有关。文件指针的位置总是停留在上一次操作结束后的位置。如果我们想要在指定位置进行读写操作,就需要移动指针到需要的位置。tell方法返回一个整数,表示文件指针当前的绝对位置。seek方法用来更改文件指针的位置,返回新的绝对位置。seek方法语句:seek(self,cookie,whence=0),其中cookie表示将文件指针位置更改为给定的字节偏移量。偏移量是相对于whence所指示的位置进行偏移。whence是可选参数,用来表示从哪个位置开始偏移。若以只读模式打开,一共含有三个参数,0表示从文件开头开始算起,1表示从当前位置开始算起,2表示从文件末尾开始算起。默认值为0。6.4文件指针【例6-10】tell和seek方法示例。seek_demo.txt中原有文本为“Hello\nworld”。我们在IDLE中输入:>>>f=open('seek_demo.txt')>>>print(f.tell())0>>>print(f.readline())hello>>>f.tell()6>>>f.seek(0,1)6#whence参数为1,表示相对当前位置偏移0字节,即未进行偏移

>>>f.seek(0)0 #whence参数为空,相对于文件开头位置偏移0字节,文件指针停留在文件开头>>>print(f.readline())hello>>>print(f.readline())world>>>f.close()说明1.在第一次操作后文件指针停留在了第一行读写后的下一个位置。2.我们可以通过seek方法回溯到文件开头的位置。6.5二进制文件的操作二进制模式打开、读取文件在模式中’b’代表用二进制模式打开文件,此时,数据以字节对象的形式进行读写。因此’rb’模式是将文件内容以二进制模式打开并读取。【例6-11】二进制模式打开文件。假设binary_demo.txt已有文本”你好!”。>>>f=open(‘binary_demo.txt’,’rb’)>>>print(f.read(2))#读取两个字节b'\xc4\xe3'>>>f.seek(0)0

>>>print(f.read())b'\xc4\xe3\xba\xc3!'>>>f.close()>>>f=open('binary_demo.txt','r')>>>print(read(2)) #读取两个字符你好

6.5二进制文件的操作从文件写入或读取字符串很简单,数字则稍显麻烦,因为read方法只返回字符串,我们必须使用int等这类函数来进行强制数据类型转换,接受'123'这样的字符串,并返回数字值123。在保存嵌套列表、字典等复杂数据类型时,手动解析和序列化的操作非常复杂。下面我们将要介绍的的模块采用python数据层次结构,可以将对象转换为字节序列,这个过程称为序列化(serializing)。从字节序列重建数据称为反序列化(deserializing)。使用pickle模块读写二进制文件python标准库pickle提供的dump函数用于将数据进行序列化并写入文件,而load函数用于将文件内容进行反序列化,还原为原来的信息。6.5二进制文件的操作【例6-12】使用pickle模块中的dump函数序列化。>>>importpickle>>>f=open('pickle_demo.txt','wb')>>>pickle.dump([1,

2,

3],

f)>>>f.close()【例6-13】使用pickle模块中的load函数反序列化。>>>importpickle>>>f=open('pickle_demo.txt','rb')>>>print(type(pickle.load(f)))<class'list'>>>>f.seek(0)0>>>print(pickle.load(f))[1,2,3]>>>f.close()说明:1.

【例6-12】中我们以二进制写入模式打开文件‘pickle_demo.txt‘,并使用dump函数将列表对象转换为字节序列,写入文件中。2.【例6-13】中我们以二进制只读模式打开文件‘pickle_demo.txt‘,并将里面的内容反序列化,可以看到读取内容的类型并不是字符串,而是将列表。3.通过序列化与反序列化,使我们能够持久化保存的数据不仅仅是字符串,还可以是对象。6.6关闭文件在前面章节中,对于使用open()函数打开的文件,我们一直都在用文件对象中的close方法将其关闭。本节就来详细介绍一下close方法。我们使用完文件后,应当关闭文件,释放文件资源,避免文件中的数据丢失。关闭文件的一般语法格式为:文件对象.close()。为什么说关闭文件是必要的,因为不关闭文件除了有可能造成数据丢失外,我们的程序还有可能因为另外一个程序占用而报错。6.6关闭文件【例6-16】关闭文件

>>>importos>>>f=open('close_demo.txt','w',newline='\n')#newline参数,设置换行符>>>f.write('hello\nworld')11>>>os.remove('close_demo.txt')#删除文件,之后会讲到PermissionError:[WinError32]另一个程序正在使用此文件,进程无法访问。:'close_demo.txt'>>>f.close()>>>os.remove('close_demo.txt')说明:1.显然,因为我们没有及时关闭close_demo.txt文件而导致做删除文件时出现了错误。当我们关闭文件以后,才可以将文件进行删除等其他操作。

6.7使用with关键字处理文件对象

当我们使用open函数打开文件时,需要我们自己调用close方法关闭文件,不然就有可能造成写入的数据丢失,这是非常痛苦的,因此我们需要一种更加方便保险的方法,那就是使用with关键字。使用with关键字处理文件对象的好处在于,不需要调用close来关闭文件防止数据丢失。即使触发异常文件也会正常关闭。使用with关键字与open()方法类似,同样可以设置buffering,encoding等参数。我们也可以使用with关键字嵌套读写多个文件。6.7使用with关键字处理文件对象【例6-17】使用with关键字处理文件。>>>foriinrange(5): withopen('demo_1.txt','a')asf1: withopen('demo_2.txt','a')asf2: f1.write(str(i)+'') f2.write(str(i+1)+'')>>>withopen('demo_1.txt')asf1: withopen('demo_2.txt')asf2: print(f1.read()) print(f2.read())

0123412345>>>os.remove('demo_1.txt')>>>os.remove('demo_2.txt')说明:1.我们在使用with构造一个对象以后,python会调用这个对象的__enter__方法,with语句块执行结束后,会自动调用__exit__方法关闭文件,因此使用with语句来读写文件更加保险。

2.我们用open函数打开文件时,没有关闭文件可能导致数据丢失的原因是操作系统会将你要写入的数据放到内存里缓存起来,即存放在缓冲区,不会立刻把全部数据写入磁盘。虽然我们可以通过设置缓冲区为0来避免这个问题,但还有其他问题我们需要考虑,比如文件资源被占用等等。6.8文件操作相关模块文件级操作

os和os.path模块是python自带的模块,通过导入该模块可以实现如删除某文件、查看文件夹内文件,更改工作目录和对计算机系统进行操作。可以通过help(’os’)和help(’os.path’)命令查看这些模块的详细介绍。文件操作常用函数如下表所示。6.8文件操作相关模块函数描述os.remove(filename)指定file路径删除文件fileos.path.abspath(filename)返回文件所在的路径名称os.path.exists(filename)判断文件filename是否存在,若存在返回True,若不存在返回Falseos.rename(old,new)重命名文件或者目录os.path.stat(filename)返回文件的所有属性os.path.getatime(filename)返回文件的最后访问时间os.path.getmtime(filename)返回文件的最后修改时间os.path.getsize(filename)返回文件的大小os.path.isfile(path)判断path是否为文件os.listdir(path)返回path路径下所有的文件的文件名组成的列表6.8文件操作相关模块【例6-18】部分文件级操作示例。>>>importos>>>importos.path>>>os.rename('c:/demo_1.txt','c:/demo.txt')#重命名文件>>>os.remove('c:/demo.txt')#删除demo.txt文件,没有返回值>>>print(os.path.exists('c:/demo.txt'))#返回布尔值True或False,判断文件是否存在False虽然文件级的函数较多,但使用方法较为简单,更多的函数的使用,可以课后一一尝试。6.8文件操作相关模块目录级操作除了支持文件级的操作,os和os.path模块还提供了大量目录级的操作函数,常用函数如下表所示。函数描述os.getcwd()返回当前python程序运行的工作路径os.chdir(path)改变工作路径为path返回用户使用操作系统的类型,windows系统得到返回值是‘nt’,Unix、Linux(含Android)返回的是’posix’os.system(command)执行command给出的shell命令。例如IDLE输入命令os.system(‘calc’)会打开计算器,输入os.system(‘cmd’)则会打开command命令窗口os.mkdir(path)创建目录os.rmdir(path)删除在path目录下的空文件夹os.walk(top,topdown=True,onerror=None)遍历目录树,该方法返回一个元组,包括三个元素:所有路径名、所有目录列表与文件列表6.8文件操作相关模块【例6-20】部分目录级操作示例。>>>importos>>>importos.path>>>os.rmdir('E:\\test')#若test为空文件夹,则删除,若test非空则会报错。即os.rmdir(path)只能删除空目录>>>os.mkdir('D:\\test\\demo')#若test目录下没有demo文件夹,则创建该文件夹,若demo文件夹已存在,则会报错>>>print(os.path.abspath('demo.txt'))#返回demo.txt所在文件的目录更多的函数的使用,可以课后一一尝试。6.9文件操作的其他模块除了python自带的文件处理模块,还可以下载第三方的文件处理模块进行文件处理,比如pillow模块,可以用于处理图像文件,openpyxl模块可以处理excel文件,下面简单介绍这两种模块

使用pillow模块处理图像

pillow模块是PIL模块的一个分支,能够支持加载图像文件,或者对图像文件进行处理以及创建图像等操作。我们可以通过命令:pipinstallpillow命令下载这个模块,一般使用fromPILimportImage语句导入这个模块。感兴趣的同学可以深入了解一下它们的用法。6.9文件操作的其他模块我们使用Image.open()方法加载一个图像文件,此方法返回一个图像对象。图像对象常用方法如下表所示。方法功能show()显示图像对象save()保存文件crop([left,up,right,down])返回从图像复制的子矩形thumbnail(size)创建缩略图split()返回三个波段数值,表示RGB颜色值filter(ImageFilter.BLUR)模糊滤镜resize(size)对图像文件设置新的大小rotate(degree)逆时针旋转对应角度convert(mode)在指定模式下进行颜色转换6.9文件操作的其他模块【例6-21】使用pillow实现图像缩放。缩放前后如图6-1和6-2所示。>>>fromPILimportImage>>>im=Image.open('pillow_demo.jpeg')#打开图像文件>>>w,h=im.size#获取原图像尺寸大小>>>print(w,h)500498>>>im.thumbnail((w//2,h//2))#原图像缩放50%>>>print('resizeimage:%s,%s'%(w//2,h//2))resizeimage:250,249>>>im.save('resize_demo.jpeg','jpeg')#以jpeg方式保存6.9文件操作的其他模块【例6-22】使用pillow实现图像模糊效果。模糊前后如图6-3和6-4所示。>>>fromPILimportImage,ImageFilter>>>im=Image.open('pillow_demo.jpeg')>>>new_im=im.filter(ImageFilter.BLUR)#应用模糊滤镜>>>new_im.save('blur_demo.jpeg','jpeg')6.9文件操作的其他模块使用openpyxl模块处理excel文件本书使用opencpyxl模块处理excel文件,它不是python自带的模块,需要我们使用pipinstallopenpyxl命令安装后使用。需要注意的是openpyxl只支持.xlsx、.xlsm、.xltx和.xltm格式的文件,如果要处理.xls等其他不支持的文件格式,可以将文件另存为上述支持的文件格式,或者使用其他模块处理该类型文件。6.9文件操作的其他模块openpyxl模块中的常用函数和方法如下表所示。函数、方法功能openpyxl.load_workbook(filename)打开已有excel文件并返回workbook对象openpyxl.Workbook()新建一个workbook对象并返回workbook.index(worksheet)输入worksheet对象,返回该工作表的索引workbook.remove(worksheet)从该文件中删除worksheet工作表workbook.create_sheet(self,title=None,index=None)创建工作表并返回worksheet对象,title为工作表名称,index为工作表索引,默认为Noneworkbook.sav

温馨提示

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

评论

0/150

提交评论