2013-05-07 53 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

相关问题