我正在编写一个程序,用于在一个非常大(无序)的文件中搜索特定行(因此最好不要将整个文件加载到内存中)。 我正在实现多线程以加快进程速度。 我正在尝试为特定线程提供文件的特定部分,即第一个线程将通过文件的前四分之一运行,第二个线程同时扫描从第一个线程停止的终点开始等等。
因此,为了做到这一点,我需要找到文件不同部分的字节位置,为了简化问题,假设我只想找到文件的中间部分。 但问题是每行的长度都不同,所以如果我只是这样做
它可以给我一行的中间位置。因此,我需要一种方法来查找下一个或上一个换行符。此外,请注意,我不想要确切的中间位置,只需要大致靠近它(因为它是一个非常大的文件)。
以下是我能够编写的代码。我不确定它是否将文件加载到内存中。而且,我真的想避免打开两个相同文件的实例(在我的程序中,我这样做是因为我不想担心读取文件时偏移量会改变)。
如果有任何修改(或新程序),可以更快地运行,那将不胜感激。
因此,为了做到这一点,我需要找到文件不同部分的字节位置,为了简化问题,假设我只想找到文件的中间部分。 但问题是每行的长度都不同,所以如果我只是这样做
fo.seek(0, 2)
end = fo.tell()
mid = end/2
fo.seek(mid, 0)
它可以给我一行的中间位置。因此,我需要一种方法来查找下一个或上一个换行符。此外,请注意,我不想要确切的中间位置,只需要大致靠近它(因为它是一个非常大的文件)。
以下是我能够编写的代码。我不确定它是否将文件加载到内存中。而且,我真的想避免打开两个相同文件的实例(在我的程序中,我这样做是因为我不想担心读取文件时偏移量会改变)。
如果有任何修改(或新程序),可以更快地运行,那将不胜感激。
fo = open(filename, "rw+")
f2 = open(filename, "rw+")
file_ = dict()
fo.seek(0, 2)
file_['end'] = fo.tell()
file_['mid'] = file_['end'] / 2
fo.seek(file_['mid'], 0)
f2.seek(file_['mid'], 0)
line = f2.readline()
fo.seek(f2.tell(), 0)
file_['mid'] = f2.tell()
fo.seek(file_['mid'], 0)
print fo.readline()
fo.seek(file_['mid']); fo.readline()
之后你已经到了一个新行,也就是说你要找的不是fo.tell()
吗? - alko