linecache — 随机访问文本行 — Python 文档
来自菜鸟教程
Python/docs/3.9/library/linecache
linecache — 随机访问文本行
源代码: :source:`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_globals 在稍后的调用中是
None
。 这避免了在实际需要一行之前执行 I/O,而不必无限期地携带模块全局变量。3.5 版中的新功能。
例子:
>>> import linecache
>>> linecache.getline(linecache.__file__, 8)
'import sys\n'