linecache
— 文字行的隨機訪問¶
原始碼: Lib/linecache.py
linecache
模組允許從任何 Python 原始檔中獲取任意行,同時嘗試在內部使用快取進行最佳化,以應對從單個檔案讀取多行的常見情況。 traceback
模組使用此功能來檢索原始碼行,以便將其包含在格式化的回溯資訊中。
tokenize.open()
函式被用來開啟檔案。此函式使用 tokenize.detect_encoding()
來獲取檔案的編碼;在沒有編碼令牌的情況下,檔案編碼預設為 UTF-8。
linecache
模組定義了以下函式:
- linecache.getline(filename, lineno, module_globals=None)¶
從名為 filename 的檔案中獲取第 lineno 行。這個函式永遠不會引發異常 —— 它會在出錯時返回
''
(對於找到的行,將包含末尾的換行符)。如果 filename 指向一個凍結模組(以
'<frozen '
開頭),並且 module_globals 不為None
,該函式將嘗試從module_globals['__file__']
獲取真實的檔名。如果找不到名為 filename 的檔案,該函式會先在 module_globals 中檢查是否存在 PEP 302
__loader__
。如果存在這樣的載入器並且它定義了get_source
方法,那麼就由該方法來確定原始碼行(如果get_source()
返回None
,則返回''
)。最後,如果 filename 是一個相對檔名,它會相對於模組搜尋路徑sys.path
中的條目進行查詢。在 3.14 版本發生變更: 支援凍結模組的 filename。
- linecache.checkcache(filename=None)¶
檢查快取的有效性。如果快取中的檔案可能在磁碟上發生了更改,而你需要更新後的版本,請使用此函式。如果省略 filename,它將檢查快取中的所有條目。
- linecache.lazycache(filename, module_globals)¶
捕獲一個非檔案模組的足夠細節,以便後續透過
getline()
獲取其程式碼行,即使在後續呼叫中 module_globals 為None
。這避免了在實際需要某一行之前執行 I/O 操作,也無需無限期地持有模組的全域性變數。在 3.5 版本加入。
示例
>>> import linecache
>>> linecache.getline(linecache.__file__, 8)
'import sys\n'