linecache --- 隨機讀寫(xiě)文本行?

源代碼: Lib/linecache.py


linecache 模塊允許從一個(gè) Python 源文件中獲取任意的行,并會(huì )嘗試使用緩存進(jìn)行內部?jì)?yōu)化,常應用于從單個(gè)文件讀取多行的場(chǎng)合。 此模塊被 traceback 模塊用來(lái)提取源碼行以便包含在格式化的回溯中。

tokenize.open() 函數被用于打開(kāi)文件。 此函數使用 tokenize.detect_encoding() 來(lái)獲取文件的編碼格式;如果未指明編碼格式,則默認編碼為 UTF-8。

linecache 模塊定義了下列函數:

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

從名為 filename 的文件中獲取 lineno 行,此函數絕不會(huì )引發(fā)異常 --- 出現錯誤時(shí)它將返回 '' (所有找到的行都將包含換行符作為結束)。

如果找不到名為 filename 的文件,此函數會(huì )先在 module_globals 中檢查 PEP 302 __loader__。 如果存在這樣的加載器并且它定義了 get_source 方法,則由該方法來(lái)確定源行 (如果 get_source() 返回 None,則該函數返回 '')。 最后,如果 filename 是一個(gè)相對路徑文件名,則它會(huì )在模塊搜索路徑 sys.path 中按條目的相對位置進(jìn)行查找。

linecache.clearcache()?

清空緩存。 如果你不再需要之前使用 getline() 從文件讀取的行即可使用此函數。

linecache.checkcache(filename=None)?

檢查緩存有效性。 如果緩存中的文件在磁盤(pán)上發(fā)生了改變,而你需要更新后的版本即可使用此函數。 如果省略了 filename,它會(huì )檢查緩存中的所有條目。

linecache.lazycache(filename, module_globals)?

捕獲有關(guān)某個(gè)非基于文件的模塊的足夠細節信息,以允許稍后再通過(guò) getline() 來(lái)獲取其中的行,即使當稍后調用時(shí) module_globalsNone。 這可以避免在實(shí)際需要讀取行之前執行 I/O,也不必始終保持模塊全局變量。

3.5 新版功能.

示例:

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