1

我希望在 Python 2.x 中编写一个脚本,该脚本将扫描物理驱动器(物理驱动器而不是逻辑驱动器)以查找大小范围内的特定文本字符串(聊天工件)。我有字符串的页眉和页脚,所以我只是想知道如何最好地扫描驱动器?我担心的是,如果我将其拆分为 250MB 的块并在解析页眉和页脚之前将此数据读入 RAM,则可能是页眉在那里,但页脚位于下一个 250MB 的块中。

所以本质上,我想扫描 PhysicalDevice0 以查找以“ABC”开头并以“XYZ”结尾的字符串,并从其中复制所有内容。我不确定是否也将数据扫描为 ascii 或 Hex。

随着驱动器变得越来越大,我希望以最快的方式做到这一点。

有什么建议么?

4

1 回答 1

1

您的问题可以表述为“如何在没有行结构的非常长的文件中进行搜索”。如果您一次读取一行一行的面向行的文本,这与您所做的没有什么不同:假设您正在逐块读取文本文件,但有一个面向行的正则表达式可供搜索;您将搜索到您已阅读的块中的最后一个完整行,然后抓住最后一个不完整的行并阅读另一个块以扩展它。因此,您不会在读取每个新块时重新开始。把它想象成一个滑动窗口;您只需将其推进以丢弃您能够完全搜索的部分。

在这里做同样的事情:编写你的代码,这样你匹配的字符串就不会碰到缓冲区的边缘。例如,如果您要搜索的标题是 100 字节长:读取一个文本块;检查是否完整的模式出现在块中;在当前块结束前将阅读窗口提前 100 个字节,并在其后添加一个新块的文本。现在您可以搜索标题而不会丢失它。找到它后,您将提取文本,直到看到停止模式(页脚)。它是在同一个块中还是在五个块之后都没有关系:您的代码应该知道它处于提取模式,直到看到停止模式。

于 2012-11-03T23:44:51.587 回答