我正在玩mmap
打开大文件。假设文件的第一行是观察计数。每个观察跨越 2 行:
Observation ID \n
Variable length number of integers
我正在对这些进行一些计算并想使用multiprocessing
. 是否可以使用seek()
寻找一行而不是字节偏移量?
显然,使用open
文件中的方法很容易做到这一点,但是,由于我正在玩mmap
,我想知道在这种情况下是否可能。
文件是字节流,而不是行。如果您需要随机访问文件中特定行的开头,则无法先验地知道您会在文件中找到它的偏移量。无论您是通过mmap()
、pread()
、seek()
或任何其他方法进行随机访问,这都是正确的。
解决这个问题的唯一方法是在行号和字节偏移之间建立一个映射。这通常意味着您必须按顺序扫描整个文件一次。
根据您的具体需要,其他方法可能适用。例如,如果大致达到目标行号就足够了,并且您知道文件中行的平均长度,也许您可以寻找所需的行号乘以平均行长,并使用您找到的任何行在那个位置。或者,如果您观察到的 ID 都是按数字顺序排列的,您可以使用字节偏移对文件进行二进制搜索,直到找到所需的行。