Python文件的打开、读取和写入

当程序运行时,变量是保存数据的好办法,但是如果在程序结束后,我们仍然想要保存数据,那就需要将数据保存到文件中了。

对于文件大家应该都不陌生,它可以把很多不同类型的信息存储到计算机上。一个文件可以包含文本、图片、声音、影像以及计算机程序等内容。

文件有以下 3 个关键属性。
  • 文件名:为了区分不同的文件,给每个文件指定一个唯一的名称。
  • 文件类型:表示文件中包含什么类型的内容。文件名中,通常要包含一个句点,句点之后的部分称为“扩展名”,它可以指出文件的类型。例如,a.txt 表示一个文本文件,b.mp3 表示一个声音文件,c.mp4 表示一个视频文件,d.py 表示一个 Python 的计算机程序文件。
  • 路径:文件在计算机上的存储位置。例如,D:\Python Programs 就是一个路径。其中 D:\ 部分是根目录,在 Windows 中,也叫作 D 盘。而 Python Programs 是一个文件夹。文件夹中还可以有其他文件夹,位于其他文件夹中的文件夹叫作子文件夹。

接下来,我们重点看看如何使用 Python 来操作文本文件。

Python 打开文件

在磁盘上读写文件的功能都是由操作系统提供的。读写文件就是请求操作系统打开一个文件对象,然后,通过操作系统提供的接口从这个文件对象中读取数据,或者把数据写入到这个文件对象。 Python 操作文件的一般步骤是:打开文件,读取文件或写入文件,关闭文件。我们先来看如何打开文件。

我们先在 D 盘的 Python Programs 文件夹中创建一个叫作“古诗1”的文本文件,在这个文件中我们录入李白写的那首著名的诗——“静夜思”,内容如图 1 所示。

Python 打开文件
图 1

打开一个文件时,要在 Python 中建立一个文件对象。建立文件对象使用 open() 函数。open() 函数可以接受两个参数,第 1 个参数是文件的路径,第 2 个参数是打开文件的模式。打开“古诗1”这个文本文件的示例代码如下所示。

txtFile=open("D:\Python Programs\古诗1.txt","r")


经常用到的文件打开模式有3种:
  • r:表示只读,它也是默认模式;
  • w:表示写入,新的内容会覆盖掉原有内容;
  • a:表示在文件末尾追加写入,不会覆盖原有的内容。

接下来,我们会详细介绍每一种打开模式的用法。

 

当使用 open() 函数打开文件并创建对象 txtFile 后,我们就可以使用这个文件对象来完成其他的工作了。

Python 读取文件

当有了文件对象,我们就可以对文件进行各种操作。如果只是读取文件中的内容,在调用 open() 函数时,传递的第 2 个参数是字母“r”,表示 read(读取)。然后就可以使用另一个函数 readlines() 来读取文件了。

我们来看一个示例,还是打开“古诗1.txt”这个文本文件,然后把里边的内容读取出来,并且打印到屏幕上,代码如下。
txtFile=open("D:\Python Programs\古诗1.txt","r")
lines=txtFile.readlines()
print(lines)
txtFile.close()
我们调用 txtFile 这个文件对象的readlines()函数,并且将返回内容赋值给变量 lines,然后把lines打印到屏幕上。

还需要特别注意的一点是,当处理完文件后,一定要调用 close() 函数关闭文件。如果没有关闭文件的话,当另一个程序要使用这个相同的文件时,就有可能出现异常。所以比较好的做法是,每一个 open() 函数都对应一个 close() 函数。

运行一下代码,得到的结果如图 2 所示。

Python 读取文件
图 2

我们从文件“古诗1.txt”中读取了文本行,然后赋值给 lines 这个列表,列表的每一项都是一个字符串,包含的就是文件中的每一行。另外,由于我们在录入文件的时候在每一行文本后面都按下了回车键,所以在每行的末尾都会有一个 \n,表示换行符号。

除了用 lines 把文件中的文本一次性读取出来,我们还可以调用 readline() 函数来逐行读取文本。还是以读取“古诗1.txt”为例,这次使用 readline() 函数来读取文本。我们使用 while 循环读取文件中的全部文本,另外会添加一个判断条件,当读取到的内容为空,表示已经读取了所有内容,就要跳出 while 循环。代码如下。
txtFile=open("D:\Python Programs\古诗1.txt","r")
while True:
    line=txtFile.readline()
    if not line:
        break
    else:
        print(line)
txtFile.close()

还是通过 open() 函数打开文件,并且创建对象 txtFile。然后使用条件为 True 的一个 while 循环,这表示这个循环会一直运行,直到满足特定条件后,执行循环中的 break 语句,才能跳出循环。

在循环中,调用 readline() 函数读取一行文本并且赋值给变量 line。然后判断 line 是否为空,如果为空,表示到了文件的末尾,跳出循环;如果不为空,表示读取到内容,将 line 中的字符串输出到屏幕上。while 循环结束后,调用 close() 函数关闭文件。

来运行一下代码,得到的结果如图 3 所示。


图 3

Python 写入文件

在上一节中,我们介绍了读取文件的方法,接下来介绍如何将文本写入到文件中。写入文本也要使用 open() 函数,第 1 个参数同样是文件的路径,而第2个参数则改为“w”,表示 write(写入)。然后就可以使用 write() 函数来写入文件。

来看一个示例,打开我们在上节中创建的“古诗1.txt”这个文本文件,然后把它另存为“古诗2.txt”(注意,此时该文件中有《静夜思》这首诗),然后往“古诗2.txt”这个文件中写入内容。代码如下
txtFile=open("D:\Python Programs\古诗2.txt","w")
txtFile.write("春晓\n")
txtFile.write("唐 孟浩然\n")
txtFile.write("春眠不觉晓\n")
txtFile.write("处处闻啼鸟\n")
txtFile.write("夜来风雨声\n")
txtFile.write("花落知多少\n")
txtFile.close()
这里调用 txtFile 这个文件对象的 write() 函数,把要写入的字符串作为参数传递进去,我们在字符串的末尾都会加一个 \n,表示换行。完成了要写入的内容后,调用 close() 函数关闭文件。

运行一下代码,打开“古诗2.txt”文本文件,看到的内容如图 4 所示。

Python 写入文件
图 4

我们会看到“古诗2.txt”这个文件中的《静夜思》的内容已经不见了,取而代之的是《春晓》这首诗。但是有的时候,我们可能不想替代原有的内容,只是想新增一些内容。这个时候,打开模式就不用“w”,而是改用“a”,表示 append(附加)。

这次我们要把丢失的《静夜思》补充到《春晓》这首诗的下面。代码如下。
txtFile=open("D:\Python Programs\古诗2.txt","a")
txtFile.write("静夜思\n")
txtFile.write("唐 李白\n")
txtFile.write("床前明月光\n")
txtFile.write("疑是地上霜\n")
txtFile.write("举头望明月\n")
txtFile.write("低头思故乡\n")
txtFile.close()
我们运行一下代码,再次打开“古诗2.txt”文本文件,看到的内容如图 5 所示。

Python 写入文件
图 5

我们会看到在《春晓》的下面,添加了《静夜思》这首诗。

提示:有的时候,我们要打开的文件不存在。在这种情况下,如果用只读模式打开文件,Python 会报错,如果用写入或追加的模式打开,Python 就会创建一个新的文件供我们写入。