[SEQUENCE ID]がメモリに収まり、データの大部分が実際にはシーケンス行にあると仮定します(提供されている例とは異なります)-ファイル(質問のfile2)を解析するオプションがあり、注釈を付けませんte [SEQUENCE ID]のみ-ただし、そのような各識別子のファイル位置。このアプローチにより、現在のワークフローの多くを中断することなく続行できます(データベースについて学習する必要があるなど)。
def get_indexes(filename):
with open(filename, "rt") as file:
sequences = {}
while True:
position = file.tell()
id = file.readline()
if not id:
break()
sequences[id.strip()] = position
# skip corresponding data line:
file.readline()
return sequences
def fetcher(filename1, filename2, sequences):
with open(filename1, "rt") as file1, open(filename2, "rt" as file2):
while True:
id = file.readline()
data = file.readline()
if not id:
break
id = id.strip()
if id in sequences:
# postion file2 reading at the identifier:
file2.seek(sequences[id])
# throw away id:
file2.readline()
data = file.readline()
yield id, data
if __name__== "__main__":
sequences = getindexes("/data/file2")
for id, data in fetcher("/data/file1", "/data/file2", sequences):
print "%s\n%s"% (id, data)