讀古今文學網 > 父與子的編程之旅:與小卡特一起學Python > 22.5 讀文件 >

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,就會回到文件的起始位置。