Python 中的文本行随机访问 (linecache)
Python 标准库中 linecache 模块的目的是方便对任何文本文件的随机访问,尽管此模块被 Python 的 traceback 模块广泛用于生成错误跟踪堆栈。读取的漂亮打印结果保存在缓存中,以便在重复读取行时节省时间。
此模块中最重要的函数是 getline(),它从给定文件中读取指定的行号。以下是函数列表:
getline(file, x)
此函数返回文件中的第 x 行。如果不存在,则返回空字符串。如果当前路径中不存在该文件,则该函数尝试在 sys.path(模块搜索路径)中的目录中找到它。
clearcache()
如果不再需要先前 getline() 函数的漂亮打印结果,可以使用此函数清除缓存。
checkcache()
此函数检查缓存是否有效。如果缓存中的文件可能已在磁盘上更改,这将非常有用。
lazycache()
使用 module_globals 为文件名填充缓存。只有在调用 getlines 时才会向模块加载器请求源代码,而不是立即请求。
getlines()
此函数以列表对象的形式返回文件中的行。
updatecache()
此函数更新缓存条目并返回行列表。
为了演示 linecache 功能的使用,我们首先构建一个文本文件来存储著名的 Python 之禅(影响 Python 设计理念的软件原则列表)。'import this' 的输出通过以下代码重定向到 zen.txt:
import sys, io zen = io.StringIO() old_stdout = sys.stdout sys.stdout = zen import this sys.stdout = old_stdout f=open('zen.txt','w') f.write(zen.getvalue()) f.close()
执行上述代码后,将在当前目录中创建 zen.txt。我们将使用此文本文件使用 getline() 函数从中读取行。
从文件中读取第 4 行:
>>> linecache.getline('zen.txt',4) 'Explicit is better than implicit.\n'
请注意,返回的字符串以换行符结尾。
要显示第 4 行到第 10 行的行号,请对 getlines() 函数返回的列表使用切片运算符:
>>> linecache.getlines('zen.txt')[4:10] ['Simple is better than complex.\n', 'Complex is better than complicated.\n', 'Flat is better than nested.\n', 'Sparse is better than dense.\n', 'Readability counts.\n', "Special cases aren't special enough to break the rules.\n"]
在这篇文章中,我们学习了 Python 标准库中的 linecache 模块。