linecache --- 隨機存取文字列

原始碼:Lib/linecache.py


linecache 模組允許從 Python 原始碼檔案中取得任何一行。當嘗試在程式內部進行最佳化,會使用快取,這是從單一檔案讀取許多行的常見情況。 這被 traceback 模組用來擷取來自原始碼檔案的行,以包含在格式化的 traceback 中。

tokenize.open() 函式用來開啟檔案。這個函式使用 tokenize.detect_encoding() 來取得檔案的編碼;在沒有編碼標記的情況下,檔案編碼預設為 UTF-8。

linecache 模組定義了下列函式:

linecache.getline(filename, lineno, module_globals=None)

從名為 filename 的檔案中取得 lineno 行。這個函式不會產生例外 --- 它會在出錯時回傳 '' (找到的行會包含終止換行字元)。

如果找不到名為 filename 的檔案,函式會先檢查 module_globals 中是否有 PEP 302 __loader__ 載入器。如果有這樣一個載入器,而且它定義了一個 get_source 方法,這之後它就會決定原始碼行(如果 get_source() 回傳 None,那麼就會回傳 '')。最後,如果 filename 是相對的檔案名稱,則會相對於模組搜尋路徑 sys.path 中的項目進行搜尋。

linecache.clearcache()

清除快取。如果你不再需要先前使用 getline() 讀取的檔案行數,請使用此函式。

linecache.checkcache(filename=None)

檢查快取是否有效。如果快取中的檔案可能已在磁碟上變更,而你需要更新的版本,請使用此功能。 如果省略 filename,則會檢查快取中的所有項目。

linecache.lazycache(filename, module_globals)

即使 module_globals 在稍後的呼叫中是 None ,也可以擷取非檔案型模組的足夠細節,以允許稍後透過 getline() 取得其行。這可以避免在真正需要某一行之前進行 I/O 操作,而不必無限期地帶著模組的全域變數。

在 3.5 版被加入.

範例:

>>> import linecache
>>> linecache.getline(linecache.__file__, 8)
'import sys\n'