除了可以借助 fileinput 子產品實作讀取檔案外,Python 還提供了 linecache 子產品。和前者不同,linecache 子產品擅長讀取指定檔案中的指定行。換句話說,如果我們想讀取某個檔案中指定行包含的資料,就可以使用 linecache 子產品。
值得一提的是,linecache 子產品常用來讀取 Python 源檔案中的代碼,它使用的是 UTF-8 編碼格式來讀取檔案内容。這意味着,使用該子產品讀取的檔案,其編碼格式也必須為 UTF-8,否則要麼讀取出來的資料是亂碼,要麼直接讀取失敗(Python 解釋器會報 SyntaxError 異常)。
要使用 linecache 子產品,就必須知道其包含了哪些函數。linecache 子產品中常用的函數及其功能如表 1 所示。
函數基本格式 | 功能 |
---|---|
linecache.getline(filename, lineno, module_globals=None) | 讀取指定子產品中指定檔案的指定行(僅讀取指定檔案時,無需指定子產品)。其中,filename 參數用來指定檔案名,lineno 用來指定行号,module_globals 參數用來指定要讀取的具體子產品名。注意,當指定檔案以相對路徑的方式傳給 filename 參數時,該函數以按照 sys.path 規定的路徑查找該檔案。 |
linecache.clearcache() | 如果程式某處,不再需要之前使用 getline() 函數讀取的資料,則可以使用該函數清空緩存。 |
linecache.checkcache(filename=None) | 檢查緩存的有效性,即如果使用 getline() 函數讀取的資料,其實在本地已經被修改,而我們需要的是新的資料,此時就可以使用該函數檢查緩存的是否為新的資料。注意,如果省略檔案名,該函數将檢車所有緩存資料的有效性。 |
舉個例子:
import linecache
import string
#讀取string子產品中第 3 行的資料
print(linecache.getline(string.__file__, 3))
# 讀取普通檔案的第2行
print(linecache.getline('my_file.txt', 2))
在執行該程式之前,需保證 my_file.txt 檔案是以 UTF-8 編碼格式儲存的(Python 提供的子產品,通常編碼格式為 UTF-8)。在此基礎上,執行該程式,其輸出結果為:
Public module variables:
http://www.baidu.com