我有一个应用程序会生成一些大于 500MB 的大型日志文件。
我用 Python 编写了一些实用程序,可以让我快速浏览日志文件并找到感兴趣的数据。但是我现在得到一些数据集,其中文件太大而无法将其全部加载到内存中。
因此,我想扫描文档一次,建立一个索引,然后只将文档的部分加载到我想一次查看的内存中。
当我打开一个“文件”时,这对我有用,一次读取一行并使用来自 file.tell() 的偏移量存储偏移量。然后我可以稍后使用 file.seek(offset, 0) 回到文件的那个部分。
但是,我的问题是日志文件中可能包含 UTF-8,因此我需要使用编解码器模块 ( codecs.open(<filename>, 'r', 'utf-8')
) 打开它们。对于生成的对象,我可以调用 seek 和 tell 但它们不匹配。
我假设编解码器需要做一些缓冲,或者它可能返回字符计数而不是来自tell的字节?
有没有解决的办法?