1

Python 2.x で、物理ドライブ (論理ドライブではなく物理ドライブ) をスキャンして、さまざまなサイズのテキストの特定の文字列 (チャット アーティファクト) を探すスクリプトを作成しようとしています。文字列のヘッダーとフッターを持っているので、ドライブをスキャンするにはどうすればよいのでしょうか? 私の懸念は、それをたとえば 250MB のチャンクに分割し、このデータを RAM に読み取ってからヘッダーとフッターを解析すると、ヘッダーはそこにあるが、フッターは 250MB の次のチャンクにある可能性があるということです。

要するに、たとえば「ABC」で始まり「XYZ」で終わる文字列の PhysicalDevice0 をスキャンし、その中からすべてのコンテンツをコピーしたいと考えています。データを ascii または Hex としてスキャンするかどうかもわかりません。

ドライブが大きくなるにつれて、可能な限り迅速にこれを行うことを目指しています。

助言がありますか?

4

1 に答える 1

1

あなたの問題は、「行構造のない非常に長いファイルを検索するにはどうすればよいか」と定式化できます。行指向のテキストを一度に 1 行ずつ読んでいる場合と同じです。テキスト ファイルをブロックごとに読んでいるが、検索する行指向の正規表現があると想像してください。読んだブロックの最後の完全な行まで検索し、最後の不完全な行を保持して、別のブロックを読み取ってそれを拡張します。したがって、新しいブロックが読み取られるたびに新たに開始する必要はありません。スライド ウィンドウと考えてください。完全に検索できた部分を破棄するためにのみ進めます。

ここでも同じことを行います: 一致させる文字列がバッファの端にヒットしないようにコードを記述します。たとえば、検索しているヘッダーが 100 バイトの長さの場合: テキストのブロックを読み取ります。完全なパターンがブロックに表示されるかどうかを確認します。読み取りウィンドウを現在のブロックの終わりの 100 バイト前に進め、その後に新しいブロック分のテキストを追加します。これで、ヘッダーを見逃すリスクなしにヘッダーを検索できます。見つかったら、ストップ パターン (フッター) が表示されるまでテキストを抽出します。同じブロックにあるか、5 ブロック後であるかは問題ではありません。停止パターンが表示されるまで、コードは抽出モードであることを認識している必要があります。

于 2012-11-03T23:44:51.587 に答える