我正在玩 mmap 来打开大文件。假设文件的第一行是观察计数。每个观察跨越 2 行:

Observation ID \n
Variable length number of integers

我正在对这些进行一些计算,并希望使用多处理。是否可以使用 seek() 来寻找一行而不是字节偏移量?显然,这可以使用文件中的 open 方法轻松完成,但是,由于我正在使用 mmap,我想知道在这种情况下是否可行。

最佳答案

文件是字节流,而不是行。如果您需要随机访问文件中特定行的开头,则无法先验地知道您会在文件中的哪个偏移量处找到它。无论您是通过 mmap()pread()seek() 还是任何其他方法进行随机访问,都是如此。

解决这个问题的唯一方法是在行号和字节偏移量之间建立映射。这通常意味着您必须按顺序扫描整个文件一次。

根据您的特定需求,其他方法可能适用。例如,如果大约达到目标行数就足够了,并且您知道文件中一行的平均长度,也许您可​​以寻求所需的行数乘以平均行长,然后使用您找到的任何行在那个位置。或者,如果您的观察 ID 都按数字顺序排列,则可以使用字节偏移量对文件进行二进制搜索,直到找到所需的行。

关于mmap - python mmap 寻求行而不是字节偏移?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15056872/

10-12 23:24