# 11.9. `linecache` - 随机存取文字行

源代码： Lib / linecache.py

`linecache`模块允许从Python源文件获取任何行，同时尝试使用高速缓存在内部进行优化，这是从单个文件读取多行的常见情况。这由`traceback`模块使用，以检索包含在格式化回迹中的源行。

`tokenize.open()`函数用于打开文件。此函数使用`tokenize.detect_encoding()`获取文件的编码；在没有编码令牌的情况下，文件编码默认为UTF-8。

`linecache`模块定义了以下函数：

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

  从名为filename的文件中获取行lineno。这个函数永远不会引发异常 - 它会在错误时返回`''`（对于找到的行，将包含终止换行符）。

  If a file named filename is not found, the function will look for it in the module search path, `sys.path`, after first checking for a PEP 302 `__loader__` in module_globals, in case the module was imported from a zipfile or other non-filesystem import source.

`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'