簡體   English   中英

python mmap regex在兩個文件中搜索通用條目

[英]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個大文件,您如何搜索小文件中特定列中的每個單詞是否存在於大文件中,如果存在,則還需要提取其他相關字段。

任何建議將不勝感激!! :)

現在沒有時間進行詳盡的回答,但這應該可以工作(假設臨時字典可以放入內存中):

  1. 遍歷較小的文件,並將相關列的所有單詞放入dict中(在dict中查找的平均大小寫性能為O(1))
  2. 遍歷更大的文件,並在字典中查找每個單詞,這些單詞直接與字典條目或其他地方一起存儲相關信息。

如果這樣做不起作用,我建議您首先對文件進行排序(或過濾),以便可以獨立處理塊(即,僅比較以A開頭的所有內容,然后比較B ...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM