只从Python的大文件中读取特定的行号?
我有一个非常大的文件,我想打开它并从中读取特定行,我总是知道我想要的数据所在的行号,但我不想每次都读取整个文件来读取它具体线路。
有没有办法只能读取 Python 中的特定行?或者最有效的方法是什么(即尽可能少地读取文件,以加快执行速度)?
回答
以下是一些选项:
- 至少检查一次文件并跟踪您感兴趣的行的文件偏移量。如果您可能多次查找这些行并且文件不会被更改,这是一个很好的方法。
- 考虑更改数据格式。例如 csv 而不是 json (见评论)。
- 如果没有其他选择,请使用传统的:
def get_lines(..., linenums: list):
with open(...) as f:
for lno, ln in enumerate(f):
if lno in linenums:
yield ln
在一个4GB的文件这场耗时〜6秒的linenums = [n // 4, n // 2, n - 1]地方n = lines_in_file。