[英]python mmap regex searching common entries in two files
我有2個巨大的xml文件。 一個大約40GB,另一個大約2GB。 假設xml格式是這樣的
< xml >
...
< page >
< id > 123 < /id >
< title > ABC < /title >
< text > .....
.....
.....
< /text >
< /page >
...
< /xml >
我已經使用mmap為文件1和文件2創建了索引文件。
每個索引文件都遵循以下格式:
Id <page>_byte_position </page>_byte_position
因此,基本上,從索引文件中獲得一個ID,我就知道該ID的標簽從何處開始以及標簽pos的結束位置。
現在,我需要做的是:-如果較大的索引文件中存在該ID,我需要能夠找出較小的索引文件(對於2GB)中的每個ID-如果該ID存在,則需要能夠從較大的索引文件(對於40GBfile)中獲取該ID的_byte_pos和_byte_pos
我當前的代碼非常慢。 我猜我正在做一個O(m * n)算法,假設m是較大文件的大小,n是較小文件的大小。
with open(smaller_idx_file, "r+b") as f_small_idx:
for line in f_small_idx.readlines():
split = line.split(" ")
with open(larger_idx_file, "r+b") as f_large_idx:
for line2 in f_large_idx.readlines():
split2 = line2.split(" ")
if split[0] in split2:
print split[0]
print split2[1] + " " + split2[2]
這太慢了!!!!
任何更好的建議?
基本上,給定2個大文件,您如何搜索小文件中特定列中的每個單詞是否存在於大文件中,如果存在,則還需要提取其他相關字段。
任何建議將不勝感激!! :)
現在沒有時間進行詳盡的回答,但這應該可以工作(假設臨時字典可以放入內存中):
如果這樣做不起作用,我建議您首先對文件進行排序(或過濾),以便可以獨立處理塊(即,僅比較以A開頭的所有內容,然后比較B ...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.