文件处理
文件处理 |
一、利用open、close方法打开、关闭文件
在Python中进行文件的打开和关闭操作使用两个内置方法:open方法和close方法。当需要对文件进行操作时,首先使用open方法打开一个文件,对文件操作完毕后,使用close方法关闭文件。
使用open方法时,需要指定打开文件的保存位置、打开文件的模式、以及文件的编码格式。这3个参数的简要介绍如下表所示。
主要参数 | 是否必须 | 释义 |
path | 是 | 文件路径 |
mode | 否,默认'r' | 打开模式 |
encoding | 否,默认None | 编码格式 |
二、read、write读写文件
在打开文件之后,最常用的对文件的操作就是读取和写入,分别使用read和write方法。并不是打开的文件都能使用read和write方法,例如read方法只能在可读的情况下调用而不能再只写等不可读的情况下调用,write方法只能在可写的情况下调用。
1.文件打开模式
使用open方法打开文件时,有一个参数mode,表示文件打开模式,最常用的有w(只写)模式、r(只读)模式、a(只追加)模式,默认为只读模式。
- 通过r(只读)模式打开文件,只能使用read方法读取文件内容,而不能使用write方法对内容进行修改。
- 通过w(只写)模式或者a(只追加)模式打开文件,只能使用write方法将内容写入文件中,而不能使用read方法对内容进行读取。w模式和a模式的区别是:w模式是从文件光标所在处写入内容,如果原文件中有内容,则新写入内容会覆盖之前内容;a模式是从文件末尾处追加内容,不会覆盖原有内容。
- 在打开模式,也有既可以写也可以读的打开模式,例如r+、w+等。具体的打开模式及描述详见下表。
打开模式 描述 r 以只读方式打开文件,文件必须存在,不存在抛出异常。这是默认模式 w 以只写方式打开文件,如果该文件已存在,则打开文件,并从头开始编辑,即原有内容会被删除;如果该文件不存在,创建新文件 a 以追加方式打开文件,如果该文件已存在,则打开文件,将新的内容写入已有内容之后;如果该文件不存在,创建新文件进行写入 r+ 以读写方式打开文件 w+ 以读写方式打开文件,如果该文件已存在,则打开文件,并从头开始编辑,即原有内容会被删除;如果该文件不存在,创建新文件 a+ 以读写方式打开文件,如果该文件已存在,则打开文件,将新的内容写入已有内容之后;如果该文件不存在,创建新文件进行写入 rb 以二进制格式打开文件,用于只读。 wb 以二进制格式打开文件,用于写入。如果该文件已存在,则打开文件,并从头开始编辑,即原有内容会被删除;如果该文件不存在,创建新文件 ab 以二进制格式打开文件,用于追加。如果该文件已存在,则打开文件,将新的内容写入已有内容之后;如果该文件不存在,创建新文件进行写入
例如,编写新闻稿内容“厦门市明天早上有雨”,在news.txt这个空文件中,写入新闻稿内容“厦门市明天早上有雨”。实现代码为:
file = open('news.txt','w',encoding='utf-8') #通过w模式打开news.txt file.write('厦门市明天早上有雨') #写入内容 file.close() #关闭文件
通过只读模式打开news.txt文件,并且实现输出文件内容
file = open('news.txt','r',encoding='utf-8') print(file.read()) file.close()
2.文件读写位置
在Python文件的读写过程中,提供了一种方法seek来定位文件的读写位置。seek接受两个参数,第一个参数是偏移量,表示光标移动几个字符,第二个参数是定位,0表示从文件开头开始,1表示从当前位置开始,2表示从文件末尾开始,默认是0。
按照之前的例子,在news.txt文件开头添加“标题:厦门市天气预报”。
分析:(1)使用seek方法移动光标,实现在文件第一行加上“标题:厦门市天气预报”。
(2)需要从文件的开头添加内容,并且保持后面的文本不变。要完成本例题任务,可以将把内容存放起来,然后在移动光标到指定位置,利用r+模式写入内容覆盖的特点,重写写入内容。
代码实现:
file = open('news.txt','r+',encoding='utf-8') #r+既为可读可写模式 content = file.read() #存放之前的内容 file.seek(0,0) #光标移动到开头 file.write('标题:厦门市天气预报\t\n'+content) file.close() file = open('news.txt','r+',encoding='utf-8') print(file.read())
执行结果:
标题:厦门市天气预报
厦门市天气预报厦门市明天早上有雨
3.文件编码格式
在文件读取过程中,还有一个重要的问题不可忽视,那就是编码格式。打开文件的编码格式如果和文件编码格式不符的话,是很可能报错打不开的。常用的编码格式如下
- ASCII码,ASCII码使用一个字符存储英文和字符。
- Unicode,使用2个字节来存储大约65535个字符。
- UTF-8,是Unicode的实现方式之一。
- GBK,汉字内码扩展规范,将汉字对应成一个数字编码。
三、行读取文件
行读取有两种方法:readline和readlines。readline方法只读取文件的下一行,返回类型为str,当遇到比较大文件的时候,可以用这种方法来避免内存不足问题;readlines方法读取文件的所有行,可以用循环遍历的方式逐行读取,返回类型是list。
下面代码是使用readlines方法:
file = open('news.txt','r',encoding='utf-8') for line in file.readlines(): print('readlines方法:'+line,end='')
执行结果为:
readlines方法:标题:厦门市天气预报
readlines方法:厦门市明天早上有雨
使用readline方法时
file = open('news.txt','r',encoding='utf-8') line = file.readline() while line: print('readline方法:'+line,end='') line = file.readline()
执行结果为:
readline方法:标题:厦门市天气预报
readline方法:厦门市明天早上有雨
从输出结果可以看出,readline方法和readlines方法都输出了文件的内容。其中,readlines方法将每一行内容作为一个str,存储在整个list中,在通过遍历list,把每一行内容打印输出。
四、with语句
在Python中,使用with语句下对文件进行操作,可以不用执行close方法关闭,with语句会自动关闭。
使用with语法的格式时:
with open(...) as name: #name表示文件名 name.read() ......