购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.12 文件操作

程序经常需要访问文件,读取文件信息或写入信息到文件,在Python语言中对文件的读写是通过文件对象(file object)实现的。Python的文件对象也称为类似文件对象(file-like object)或流(stream),文件对象可以是实际的磁盘文件,也可以来自其他存储或通信设备,如内存缓冲区、网络、键盘和控制台等。

文件读写

文件操作主要包括对文件内容的读写操作,这些操作是通过文件对象(file object)实现的,通过文件对象可以读写文本文件和二进制文件。

1.打开文件

在文件读写之前先要打开文件,打开文件可以通过open函数实现,该函数返回文件对象。open函数是Python的内置函数,它屏蔽了创建文件对象的细节,使创建文件对象变得简单。open函数语法如下。

open函数共有8个参数,其中参数file和mode是最为常用的,其他的参数一般情况下很少使用,下面分别重点介绍file和mode两个参数的含义。

·file参数。

file参数是要打开的文件,可以是字符串或整数。如果file是字符串,表示文件名,文件名可以是相对当前目录的路径,也可以是绝对路径;如果file是整数,表示文件描述符,文件描述符指向一个已经打开的文件。

·mode参数。

mode参数用来设置文件打开模式。文件打开模式用字符串表示,最基本的文件打开模式如表2-7所示。

表2-7 文件打开模式

在表2-7中,b和t是文件类型模式,如果是二进制文件,需要设置rb、wb、xb、ab;如果是文本文件,需要设置rt、wt、xt、at,由于t是默认模式,所以可以省略为r、w、x、a。

+必须与r、w、x或a组合使用,才可设置文件为读写模式,对于文本文件,可以使用r+、w+、x+或a+;对于二进制文件,可以使用rb+、wb+、xb+或ab+。

提示

r+、w+和a+区别如下:r+打开文件时,如果文件不存在则抛出异常;w+打开文件时,如果文件不存在则创建文件,如果文件存在则清除文件内容;a+类似于w+,打开文件时,如果文件不存在则创建文件,如果文件存在则在文件末尾追加。

示例代码如下。

代码解释如下。

·代码第①行通过w+模式打开文件test.txt,由于文件test.txt不存在,所以会创建test.txt文件。

·代码第②行通过write函数写入字符串到文件。

·代码第③行通过a+模式打开文件test.txt,该文件是绝对路径文件名。注意:由于字符串中有反斜杠,要么用转义字符“\\”表示,要么用原始字符串表示。

2.关闭文件

当使用open函数打开文件后,若不再使用文件,应该调用文件对象的close函数关闭文件。文件的操作往往会抛出异常,为了保证文件操作无论正常结束还是异常结束都能够关闭文件,我们也可以使用with as代码块进行自动资源管理,示例代码如下。

代码解释如下。

·代码第①行通过a+模式打开文件test1.txt文件。

·代码第②行关闭文件。

·代码第③行使用with as打开文件,返回文件对象赋值给fobj变量。在with代码块中进行读写文件操作,最后在with代码结束关闭文件。with as将在2.13.2小节详细介绍。

3.文本文件读写

文本文件读写的单位是字符,而且字符是有编码的。文本文件读写主要方法有如下几种。

·read(size=-1):从文件中读取字符串,size限制最多读取的字符数,size=-1时没有限制,读取全部内容。

·readline(size=-1):读取到换行符或文件尾并返回单行字符串,如果已经到文件尾,则返回一个空字符串,size是限制读取的字符数,size=-1时没有限制。

·readlines():读取文件数据到一个字符串列表中,每一个行数据是列表的一个元素。

·write(s):将字符串s写入文件,并返回写入的字符数。

·writelines(lines):向文件中写入一个列表,不添加行分隔符,因此通常为每一行末尾提供行分隔符。

·flush():刷新写缓冲区,数据会写入文件中。

下面通过文件复制示例熟悉一下文本文件的读写操作,代码如下:

上述代码实现了将test.txt文件内容复制到copy.txt文件中。代码第①行是打开test.txt文件,由于test.txt文件采用UTF-8编码,因此打开时需要指定UTF-8编码。代码第②行通过readlines()方法读取所有数据到一个列中,这里选择哪一个读取方法要与代码第④行的写入方法对应,本例中是writelines()方法。代码第③行打开要复制的文件,采用的打开模式是w,如果文件不存在则创建,如果文件存在则覆盖,另外注意编码集也要与test.txt文件保持一致。

4.二进制文件读写

二进制文件读写的单位是字节,不需要考虑编码的问题。二进制文件读写主要方法如下。

·read(size=-1):从文件中读取字节,size限制最多读取的字节数,如果size=-1则读取全部字节。

·readline(size=-1):从文件中读取并返回一行,size限制读取的字节数,size=-1时没有限制。

·readlines():读取文件数据到一个字节列表中,每一个行数据是列表的一个元素。

·write(b):写入b字节,并返回写入的字节数。

·writelines(lines):向文件中写入一个字节列表,不添加行分隔符,因此通常为每一行末尾提供行分隔符。

下面通过文件复制示例熟悉一下二进制文件的读写操作,代码如下:

上述代码实现了将coco2dxcplus.jpg文件内容复制到当前目录的copy.jpg文件中。代码第①行打开coco2dxcplus.jpg文件,打开模式是rb。代码第②行通过read()方法读取所有数据,返回字节对象b。代码第③行打开要复制的文件,打开模式是wb,如果文件不存在则创建,如果文件存在则覆盖。代码第④行采用write()方法将字节对象b写入文件中。 ivE9e2VviToxYePgIT1YW2aSwlgdfm7AWNz2vvvN6J+o0w5lujY4x4q5ZpOxUPZC

点击中间区域
呼出菜单
上一章
目录
下一章
×