文件处理

文件处理

一、利用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()
    ......

 

posted @ 2019-07-12 14:42  流浪代码  阅读(255)  评论(0编辑  收藏  举报