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 的文件,该函数首先检查 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)

捕获有关基于非文件的模块的足够详细信息,以便以后可以通过 getline() 获取其行,即使在以后的调用中 module_globalsNone。这避免了在实际需要行之前进行 I/O,而无需无限期地保留模块全局变量。

在 3.5 版本中添加。

示例

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