上一节提到,可以使用 open
函数打开文件并创建文件对象。这是 Python 的内置功能之一。要打开文件来完成读,需要使用 'r'
作为第二个参数,如下:
my_file = open('notes.txt', 'r')
如果想打开一个文件完成读,但是这个文件根本不存在,你就会得到一条错误消息。(毕竟,你无法读一个原本没有的东西,对不对?)
Python 还提供了另外一些内置功能,一旦文件打开可以将信息从文件获取到你的程序中。要从一个文件读取文本行,可以使用 readlines
方法,如下:
lines = my_file.readlines
这会读取整个文件,并建立一个列表,每个文本行作为列表中的一项。下面假设 notes.txt 文件包含一个小列表,上面写的都是你每天要做的事情:
Wash the carMake my bedCollect allowance
我们可以使用“记事本”(Notepad)之类的程序来创建这个文件。其实,你可以现在就动手,使用记事本(或者你喜欢的文本编辑器)来建立这样的文件。可以把它命名为 notes.txt,保存在 Python 程序所在的位置,然后关闭记事本。
如果用一个小 Python 程序打开并读取这个文件,代码可能如代码清单 22-1 所示。
代码清单 22-1 打开和读文件
my_file = open('notes.txt', 'r')lines = my_file.readlinesprint lines
输出可能是这样的(取决于你在文件中放入的内容):
>>>======================= RESTART =========================>>>['Wash the car/n', 'Make my bed/n', 'Collect allowance']
这里从文件读取了文本行,并放入一个名为 lines
的列表中。这个列表中的每一项都是一个字符串,包含从文件读取的一行,注意前两行末尾的 /n
部分。这些是分隔文件中各行的换行符。我们创建文件时在这里按下了回车键。如果键入最后一行后按了回车键,那么在第三项后面也会有一个 /n
。
代码清单 22-1 的程序中还要增加一点。处理完文件时,一定要关闭文件:
my_file.close
嗯,卡特,倘若另一个程序需要使用这个文件,而我们的程序又还没有将它关闭,那个程序就无法访问这个文件了。使用完文件后就关闭它,这样通常会比较好。
一旦把文件读取为程序中的一个字符串列表,接下来就可以任意处理它了。这个列表与其他 Python 列表是一样的,所以可以循环处理、排序、追加元素、删除元素等等。这些字符串也像其他字符串一样,可以打印、转换为 int
或 float
(如果包含数字的话)、用作 GUI 中的标签,或者完成能够对字符串做的其他处理。
一次读取一行
readlines
方法会读取文件的所有行,直到文件末尾。如果你想一次只读取一行,可以使用 readline
方法,如下:
first_line = my_file.readline
这只会读文件的第一行。如果再在同一个程序中使用 readline
,Python 会记住目前在什么位置。所以,第二次使用时,你会得到文件的第二行。代码清单 22-2 显示了这样的一个例子。
代码清单 22-2 多次使用
readline
my_file = open('notes.txt', 'r')first_line = my_file.readlinesecond_line = my_file.readlineprint "first line = ", first_lineprint "second line = ", second_linemy_file.close
这个程序的输出是这样的:
>>>================== RESTART ====================>>>first line = Wash the carsecond line = Make my bed
readline
方法一次只读取一行,所以它不会把结果放入一个列表。每次使用 readline
时,都只是得到一个字符串。
回到起始位置
如果已经使用了几次 readline
,现在希望退回到文件的起始位置,可以使用 seek
方法,就像这样:
first_line = my_file.readlinesecond_line = my_file.readlinemy_file.seek(0)first_line_again = my_file.readline
seek
方法会让 Python 找到文件中你指示的位置。括号中的数字就是从文件起始位置算起的字节数。所以如果把它设置为 0,就会回到文件的起始位置。