我正在玩 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/