2013-05-07 74 views
1

我想通過一個十六進制轉儲搜索匹配字符串十六進制,即testHexData.txt可能有-20F09FE520F09FE51CF09FE518F09FE514F09FE50000A0E10CF09FE508F09FE5CEFABEBA300B00007C000028700000284900A0E3CC0100EB080200EA8716A0E3020BA0E3010080E000D0A0E194499FE5000094E5000050E30200000AC20100EB044084E2F9FFFFEA10089FE5000090E5F00000E28716A0E30000 和testHex.txt會有字符串可能會或可能不會在testHexData.txt中,例如。 20F09FE,518F09FE,FGG7988H等。搜索相匹配的連續字符串在Python

我發現下面的代碼段,這時候要搜索的數據是列表格式的作品,即 豬 狗 貓 但如果要搜索的數據是連續字符串。代碼運行沒有任何錯誤,但不會產生結果。我確信解決方案是一個簡單的解決方案,但我試圖找到它。我非常感謝任何幫助。謝謝:)

file1 = set(line.strip() for line in open(r'C:\Python27\testHexData.txt')) 

file2 = set(line.strip() for line in open(r'C:\Python27\testHex.txt')) 

for line in file1 & file2: 

    if line: 

     print line 
+0

輸出是可以接受的匹配在同一位置(例如hex文件#1字符30-35用十六進制文件#匹配2個字符30-35),或他們可能位於十六進制文件中的不同位置(例如,十六進制文件#1字符30-35與十六進制文件#2字符472-477匹配)? – pztrick 2013-05-07 16:22:09

+0

你想要什麼輸出?如果其全部一行都不行,則每行都不起作用。 – cmd 2013-05-07 16:23:17

+0

pztrick-匹配可能在文件中的任何位置,實際文件的大小爲GB。 – user2188291 2013-05-07 16:31:42

回答

1

你或者需要加載整個文件在內存中(不好,如果它的大)或把它放在卡盤中。我調整了下面的內容以便在2000個大小的細分中進行查看。假設你只是想什麼模式是文件

patterns = set(line.strip() for line in open(r'C:\Python27\testHex.txt')) 
max_pattern_len = max([len(p) for p in patterns]) 
with open(r'C:\Python27\testHexData.txt') as hex_file: 
    prev_segment_part = '' 
    for segment in hex_file.read(2000): 
     seg = prev_segment_part + segment 
     for pattern in list(patterns): 
      if pattern in seg: 
       print "Found:", pattern 
       patterns.remove(pattern) 
     prev_segment_part = seg[-max_pattern_len:] 
+0

感謝cmd,但它再次運行,雖然它沒有錯誤,但它不會產生任何結果... – user2188291 2013-05-07 16:34:12

+0

@ user2188291調整大文件處理 – cmd 2013-05-07 16:46:58

+0

cmd,你是一個紳士和學者!還是一位女士。無論哪種方式,它完美的作品。細分市場部分是我意識到的問題,但會在下一階段嘗試解決,所以您已經爲我節省了更多的頭疼!再次感謝! :) – user2188291 2013-05-08 08:37:30

相關問題