首页 » 父与子的编程之旅:与小卡特一起学Python » 父与子的编程之旅:与小卡特一起学Python全文在线阅读

《父与子的编程之旅:与小卡特一起学Python》22.5 读文件

关灯直达底部

上一节提到,可以使用 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 列表是一样的,所以可以循环处理、排序、追加元素、删除元素等等。这些字符串也像其他字符串一样,可以打印、转换为 intfloat(如果包含数字的话)、用作 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,就会回到文件的起始位置。