第十二章 文件读写
12.1 打开文件
我们在使用文件之前要先将文件打开,这通过open()函数实现。open()函数的语法如下:
open()函数中的参数还有很多,这里介绍4个常用参数,这些参数的含义如下。
1.file参数
file参数用于表示要打开的文件,可以是字符串或整数。如果file是
字符串,则表示文件名,文件名既可以是当前目录的相对路径,也可以
是绝对路径;如果file是整数,则表示一个已经打开的文件。
2.mode参数
mode参数用于设置文件打开模式,用字符串表示,例如rb表示以只
读模式打开二进制文件。用于设置文件打开模式的字符串中的每一个字
符都表示不同的含义,对这些字符的具体说明如下。
t:以文本文件模式打开文件。
b:以二进制文件模式打开文件。
r:以只读模式打开文件。
w:以只写模式打开文件,不能读内容。如果文件不存在,则创建
文件;如果文件存在,则覆盖文件的内容。
x:以独占创建模式打开文件,如果文件不存在,则创建并以写入
模式打开;如果文件已存在,则引发FileExistsError异常。
a:以追加模式打开文件,不能读内容。如果文件不存在,则创建
文件;如果文件存在,则在文件末尾追加。
+:以更新(读写)模式打开文件,必须与r、w或a组合使用,才能
设置文件为读写模式。
这些字符可以进行组合,以表示不同类型的文件的打开模式,如下
表所示。
3.encoding参数
encoding用来指定打开文件时的文件编码,默认是UTF-8编码,主
要用于打开文本文件。
4.errors参数
errors参数用来指定在文本文件发生编码错误时如何处理。推荐erro
rs参数的取值为’ignore’,表示在遇到编码错误时忽略该错误,程序会继
续执行,不会退出。
f=open('text.txt','w+')#创建了一个TXT文件
f.write('world')#将'world'写入文件
f.close()
f=open('text.txt','r+')
f.write('1234567')#已经创建了,再打开则覆盖原本内容
f.close()
f=open('text.txt','a')
f.write('hahahahahaha')#在文件中追加内容
f.close()
#采用普通字符串表示绝对路径文件名,其中的反斜杠需要转义
fname=r'C:\Users\流痕\Desktop\Python文件\text.txt'
f=open(fname,'a+')
f.write('world')#打开text文件,在末尾添加world
f.flush()
f.close
12.2 关闭文件
12.2.1 在finally代码块中关闭文件
对文件的操作往往会抛出异常,为了保证对文件的操作无论是正常结束还异常结束,都能够关闭文件,我们应该将对close()方法的调用放在异常处理的finally代码块中。
f_name='text.txt'
f=None
try :
f=open(f_name)#判断f变量是否有数据,若有,说明文件打开成功
print('打开文件成功')
content=f.read()
print(content)
except FileNotFoundError as e:
print('文件不存在,请先创建文件')
except OSError as e:
print('处理OSError异常')
finally :
if f is not None :
f.close()
print('关闭文件成功')
打开文件成功
1234567hahahahahaha
关闭文件成功
12.2.2 在with as代码块中关闭文件
with as 代码块可以自动释放资源(包括关闭文件的操作),可以替代finally代码块,优化代码结构,提高可读性。
f_name='text.txt'
with open(f_name) as f:
content=f.read()
print(content)
1234567hahahahahaha
12.3 读写文本文件
读写文本文件的相关方法如下。
- read(size=-1):从文件中读取字符串,size限制读取的字符数,size=-1指对读取的字符数没有限制。
- readline(size=-1):在读取到换行符或文件尾时返回单行字符串。如果已经到文件尾,则返回一个空字符串。size是限制读取的字符数,size=-1表示没有限制。
- readlines():读取文件数据到一个字符串列表中,每一行数据都
是列表的一个元素。 - write(s):将字符串s写入文件中,并返回写入的字符数。
- writelines(lines):向文件中写入一个字符串列表。不添加行分隔符,因此通常为每一行末尾都提供行分隔符。
- flush():刷新写缓冲区,在文件没有关闭的情况下将数据写入文
件中。