【问题标题】:Searching a continuous string for matches in Python在 Python 中搜索连续字符串以查找匹配项
【发布时间】:2013-05-07 16:14:48
【问题描述】:

I am trying to search through a hex dump for matching hex strings, ie in testHexData.txt there might be-20F09FE520F09FE51CF09FE518F09FE514F09FE50000A0E10CF09FE508F09FE5CEFABEBA300B00007C000028700000284900A0E3CC0100EB080200EA8716A0E3020BA0E3010080E000D0A0E194499FE5000094E5000050E30200000AC20100EB044084E2F9FFFFEA10089FE5000090E5F00000E28716A0E30000 并且在 testHex.txt 中会有一些字符串可能在 testHexData.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 字符 30-35 与十六进制文件 #2 字符 30-35 匹配),或者它们可以在十六进制文件中的不同位置(例如,十六进制文件 #1 字符 30-35 与十六进制文件 #2 字符 472-477 匹配)?
  • 你想要什么输出?如果全部为一行,则每行将不起作用。
  • pztrick- 匹配可以在文件中的任何位置,实际文件大小为 GB。

标签: python string search


【解决方案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:]

【讨论】:

  • 感谢 cmd,不过再一次,虽然它运行没有错误,但它不会产生任何结果...
  • @user2188291 针对大文件处理进行了调整
  • cmd,君子文人!或者女士。无论哪种方式,它都能完美运行。片段部分是我意识到的一个问题,但打算在下一阶段尝试解决,所以你让我更加头疼了!再次感谢! :)
猜你喜欢
  • 2017-09-12
  • 2018-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-23
  • 2020-03-20
  • 1970-01-01
  • 2015-05-20
相关资源
最近更新 更多