在 Python 中随机访问文本行 (linecache)
Python 标准库中 linecache 模块的目的是方便随机访问任何文本文件,尽管 Python 的 traceback 模块广泛使用此模块来生成错误跟踪堆栈。读取的更多漂亮打印保存在缓存中,以便在重复读取行时节省时间。
此模块中最重要的函数是 getline(),它从给定文件中读取指定的行号。以下是函数列表 −
getline(file, x)
此函数返回文件中的第 x 行。如果不存在,它将返回空字符串。如果文件不在当前路径中,函数将绑定到 sys.path 中的目录中找到它 –模块搜索路径。
clearcache()
如果不再需要之前的 getline() 函数的 prettyprint,您可以通过此函数清除缓存。
checkcache()
此函数检查缓存是否有效。如果缓存中的文件可能已在磁盘上更改,则此功能很有用。
lazycache()
使用 module_globals 为 filename 播种缓存。仅当调用 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 模块。