3

Pythonの比較ディレクトリに関連するstackoverflowの多くの質問を読みました。しかし、私の現在の質問は少し異なります。
2つの異なるバージョンのリリースパッケージの内容を含む2つのディレクトリがあります。次に、内容が同じであることを確認するために比較したいと思います。ただし、バージョン名が埋め込まれているファイルはほとんどありません。これが、それらを比較して結論を​​出すための最良の方法です(バージョンの違いを除いて、すべてのファイルが一致します)。


例:
バージョンV1R1C1には、次のようなディレクトリ構造が含まれています。

pmt> find . -name "*"
.
./c1
./c1/c2
./c1/c1_V1R1C1.cfg
./a1
./a1/a1_V1R1C1.cfg
./a1/a2
./a1/a2/a1a2_V1R1C1.cfg
./b1/a_best_file.txt
./b1/b2/a_test_file.txt
./b1/b2/b1b2_V1R1C1.cfg
./a_V1R1C1.cfg

バージョンV2R3C1には、以下の構造が含まれている場合があります

pmt> find . -name "*"
.
./c1
./c1/c2
./c1/c1_V2R3C1.cfg
./a1
./a1/a1_V2R3C1.cfg
./a1/a2
./a1/a2/a1a2_V2R3C1.cfg
./b1/a_best_file.txt
./b1/b2/a_test_file.txt
./b1/b2/b1b2_V2R3C1.cfg
./a_V2R3C1.cfg

上記の場合、プログラムはそれを同等の構造としてフラグを立てる必要があります。

たとえば、両方のディレクトリ構造をキャッシュ(dict)に再帰的に読み込み、バージョン情報をリッピングして比較するなど、いくつかの解決策を考えることができます。ただし、2つの理由により、完全に効果的なメカニズムではないようです。組み込みのディレクトリ比較2.複数の読み取り/リッピング/比較はコストに制限されます(特に巨大なディレクトリツリー構造の場合)。

上記よりもシンプルで効率的なアイデアを探しています。


PS:
1.違いがある場合(上記の例とは異なるバージョンを除く)、左/右などを使用して差分リストを取得したいと思います。
2.両方のディレクトリのバージョン名を事前に想定できます(最初のケースのV1R1C1と2番目のケースのV2R3C1など)。

4

2 に答える 2

2

globモジュールには(リスト生成と比較して)イテレーター関数があり、これをライトforループで使用して、各ファイルエントリを反復処理し、違いを別のリスト/辞書にキックすることができます。

そうすれば、大量のファイル名を生成してからそれらを選択する必要がなくなります。

http://docs.python.org/py3k/library/glob.html#module-glob

于 2012-10-23T18:06:33.193 に答える
2

セット比較はどうですか?

set((remove_version(filepath) for filepath in iter_file(dic1))) == set((remove_version(filepath) for filepath in iter_file(dic2)))
于 2012-10-23T18:08:42.693 に答える