Day9:读写文件
根据你所编写的程序类型,你需要保存或访问信息。为此,你需要了解如何处理文件,无论是创建、写入还是读取文件。
为了跟今天的学习内容,请在"Week_06"笔记本最下面添加一个markdown单元格,并写上“读写文件”。
1 处理文本文件(.txt文件)
默认情况下,Python带有一个open()
函数,它允许我们创建或修改文件。这个函数可接受两个参数:“文件名”和“操作模式”。
输入的文件名如过已经存在,那么程序将打开文件并修改;否则,它将创建该文件。操作模式参数则告诉Python打开和处理文件方式。
例如,如果只是需要从文件中获取信息,那么可以以只读模式打开。以只读模式打开文件,可以防止文件意外修改。
下面,让我们学习如何打开、写入和读取文本文件。
1| # 打开/创建和写入一个文本文件
2| f = open("test.txt", "w+") # 以“读写”模式打开文件
3| f.write("this is a test")
4| f.close( )
5| # 读取文本文件
6| f = open("test.txt", "r")
7| data = f.read( )
8| f.close( )
9| print(data)
运行上端代码。
让我们一行一行地来研究这段代码。
为了对文件进行编辑,我们以“读和写”模式打开文件,并将值赋给变量f
。
在第3行,我们使用write()
方法将句子写入文件,随后关闭文件。
记住,如果你打开了一个文件,一定记得在完成文件操作后关闭该文件。
在我们创建测试文件并写入内容后,我们又以只读模式将其打开。在第7行,我们使用read()
方法将文件的所有内容读取为一个字符串,该字符串被分配给我们的data
变量,然后输出文本信息。
注意: “w”模式会完全覆盖文件,当需要像文本中添加内容时,使用“a”模式打开文件。
2 向CSV文件中写入内容
CSV文件中以逗号将每个数据分隔开,这就是所谓的表格数据结构。
Python中有一个“csv”标准库,方便我们操作CSV文件。在使用这个库时,我们需要先导入它。
导入这个库之后,我们将使用另一种方法打开文件,即使用with
关键字。with
关键字这一概念,就像是一个while循环(译者注:while循环中的代码运行完以后,while循环将自动关闭)。
当文件打开时,我们可以使用它,一旦代码块运行完毕,它会自动为我们关闭文件。
让我们来看看这个例子:
1| # 打开/创建和写入一个CSV文件
2| import csv
3| with open("test.csv", mode="w", newline="") as f:
4| writer = csv.writer(f, delimiter=",")
5| writer.writerow( ["Name", "City"] )
6| writer.writerow( ["Craig Lou", "Taiwan"] )
运行上端代码。让我们一行一行地学习这段代码。
在第2行导入CSV库,随后我们以“写入”模式打开文件并赋值给变量f
。
我们还将参数newline
设置为空字符串,以防止在行之间创建空行。
在第4行,我们创建了一个writer
变量,它允许我们写入CSV文件。
最后两行代码将两行数据写入CSV文件。这段代码运行完毕后,文件将自动关闭。
继续检查文件,你将看到一个CSV文件。
请记住,写入模式总是会覆盖之前文件中的所有数据。
3 读取CSV文件
为了从我们刚刚创建的CSV文件中读取数据,我们可以以“只读”模式打开文件:
1| # 读取CSV文件
2| with open("test.csv", mode="r") as f:
3| reader = csv.reader(f, delimiter=",")
4| for row in reader:
5| print(row)
运行上端代码。
你将注意到,它将每行数据以列表形式输出,每个列表内包含了2个元素。我们以只读模式打开文件并作为变量f
。
之后,我们通过CSV库创建一个reader对象,该对象将为我们读取文件中的内容。然后我们循环reader变量并输出每一个数据。
** 注意:** 我们下周将学习“对象”有关知识。
4 Python中的文件操作模式
操作模式 | 描述 |
---|---|
'r' | 默认模式,即只读模式 |
'w' | 写入模式。如果文件不存在,则创建一个文件 |
'x' | 创建新文件,如果文件存在,则操作失败 |
'a' | 追加模式,如果文件不存在,则创建一个文件 |
'b' | 以二进制模式打开文件 |
'+' | 读写模式, 适合更新文件 |
5 今日练习
- 用户输入: 让用户输入幸运数字,并将这些数字保存到文本文件中。
- 数据转存: 将下面字典中的数据保存到csv文件中,以“键”作为标题,以“值”作为数据行。
>>> data = { 'name' : ['Dave', 'Dennis', 'Peter', 'Jess'], 'language': ['Python', 'C', 'Java', 'Python'] }
今日小结
今天我们学习了如何处理文本文件和CSV文件。
有两种处理文件的方法,每种方法都有各自的用途,但是通常使用with语句。