在Python中搜索连续字符串以查找匹配项

时间:2013-05-07 16:14:48

标签: python string search

我想通过一个十六进制转储以搜索testHexData.txt匹配十六进制的字符串,即有可能是-20F09FE520F09FE51CF09FE518F09FE514F09FE50000A0E10CF09FE508F09FE5CEFABEBA300B00007C000028700000284900A0E3CC0100EB080200EA8716A0E3020BA0E3010080E000D0A0E194499FE5000094E5000050E30200000AC20100EB044084E2F9FFFFEA10089FE5000090E5F00000E28716A0E30000 在testHex.txt中,可能存在或不存在于testHexData.txt中的字符串,例如。 20F09FE,518F09FE,FGG7988H等。

我找到了以下代码,当要搜索的数据采用列表格式时,即 猪 狗 猫 但是如果要搜索的数据是连续字符串则不行。代码运行时没有任何错误,但不会产生结果。我确信这个解决方案很简单,但是我正试图找到它。我非常感谢任何帮助。谢谢:))

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

1 个答案:

答案 0 :(得分:1)

您需要将整个文件加载到内存中(如果它很大则不好)或者将其放入chucks中。我将下面的内容调整为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:]