2.6 文件处理
文件就像一个仓库,可以存储各种类型的数据。根据用途可以将文件分为数据库文件、图像文件、音频文件、视频文件、文本文件等。本节主要介绍文本文件的处理。在文本文件中存储的是常规字符串,由文本行组成,每行通常由换行符“\n”结尾。
对于文本文件来说,通常的操作流程为打开文件并创建对象,对该文件内容进行读取、写入、删除、修改等操作,关闭并保存文件。
1.打开文件并创建对象
在Python中内置了文件对象,通过open()函数就可以指定模式打开指定文件,并创建文件对象,该函数的格式如下:
open(file[, mode='r'[, buffering=-1]])
其中各参数的含义如下:
·file:指定要打开或者创建的文件的名称,如果该文件不存在于当前目录中,则需要明确指出绝对路径。
·mode:指定打开文件后的处理方式,其中包括读模式、写模式、追加模式、二进制模式、文本模式、读写模式等。
·buffering:指定读写文件的缓冲模式,数值为0表示不缓存,数值为1表示使用行缓存模式,数值大于1表示缓冲区的大小,默认值为-1。二进制文件和非交互文本文件以固定大小的块为缓冲单位,等价于io。
2.对文件内容进行操作
对文件内容进行的操作包括:文件的读取、写入、追加,以及设置采用二进制模式、文本模式、读写模式等。下面针对读写操作进行详细讲解。
(1)向文本文件中写入内容
如果需要向文本文件中写入内容,在打开文件时就需要指定文件的打开模式为写模式。应根据不同的开发需求选取不同的写入模式:
·w:写入模式。如果文件已经存在,则先清空文件内容;如果文件不存在,则创建文件。
·x:写入模式,创建新文件,如果文件已经存在,则抛出异常。
·a:追加模式,也是写入模式的一种,不覆盖文件的原始内容。
例如,创建demo文件并写入“hello world!”,此时可以选用w模式。
>>> s = 'hello world! \n' >>> f = open('demo.txt','w') >>> f.write(s) >>> f.close()
打开文件,发现在根目录中已经生成文件demo.txt,内容为“hello world!”。
再例如,向已经存在的demo.txt文件中写入“hello China!”且不清空原始内容,此时可以选用a模式打开文件。
>>> s = 'hello China!' >>> f = open('demo.txt','a') >>> f.write(s) >>> f.close()
打开根目录下的demo.txt文件,发现文件内容中增加了“hello China!”字样。
(2)读取文件中的内容
有时需要加载文本中的某行或者全部内容,此时就需要用到文本的读取操作:
·r:读模式(默认模式,可以省略),如果文件不存在,则抛出异常。
·+:读写模式(可与其他模式组合使用)。
例如,读取根目录下demo.txt文件的第一行内容:
>>> f = open('demo.txt','r') >>> print(f.readline())
运行结果:
hello world!
再例如,读取根目录下demo.txt文件的所有内容:
>>> f = open('demo.txt','r') >>> print(f.read())
运行结果:
hello world! hello China!
3.关闭文件对象
当操作完文件内容以后,一定要关闭文件对象,这样才能确保所做的修改都保存到了文件当中,如下所示:
f.close()
文件操作一般都要遵循“打开→读写→关闭”的基本流程,但是如果文件读写操作代码引发了异常,就很难保证文件能够被正常关闭。可以使用上下文管理关键字with来避免产生这个问题。关键字with能够自动管理资源,总能保证文件正确关闭,并且可以在代码执行结束后自动还原开始执行代码块时的现场。下面用一个示例来说明with的使用方法。
例如,利用with关键字向文件demo.txt文件中继续添加“hello ms08067”:
>>> with open('demo.txt','a') as f: ... f.write('hello ms08067') ...
运行结果:
hello world! hello china! hello ms08067