3

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

Observation ID \n
Variable length number of integers

我正在对这些进行一些计算并想使用multiprocessing. 是否可以使用seek()寻找一行而不是字节偏移量?
显然,使用open文件中的方法很容易做到这一点,但是,由于我正在玩mmap,我想知道在这种情况下是否可能。

4

1 回答 1

2

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

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

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

于 2013-02-24T22:48:28.500 回答