基本構造を持つアプリケーションによって作成されたディレクトリがあります。ディレクトリパターンの確認Python
G009832
- SearchData
_SearchDb_
_SearchDb_.dbsync
- WaveformCache
file1.wcf
file2.wcf
ProjectNameFile.apf
ProjectNameSettings.xml
ProjectNameSettingsBinary.abf
このフォルダとファイルの構造はかなり一定である、唯一の変数は、マシン名でルートフォルダ名、およびWaveformCacheフォルダに存在する* .wcf波形キャッシュファイルの量です。
ユーザーが削除する前に、これらのフォルダまたはサブフォルダに追加のコンテンツを追加していないことを確認したいと思います。
現時点では、各フォルダの内容をos.walkで確認しています。
illegal = []
if IsMachineFormatted(folder): # Function that checks folder is machine folder.
for root, dirs, files in os.walk(folder):
for f in files:
if f == '_SearchDb_':
pass
elif f == '_SearchDb_.dbsync':
pass
elif f.endswith('.wcf'):
pass
elif f.endswith('.apf'):
pass
elif f.endswith('.xml'):
pass
elif f.endswith('.abf'):
pass
else:
illegal.append(f)
else:
pass
これはokですし、違法なファイルのリストを返しますが、それは非常にエレガントではありません、それはなどの余分なディレクトリをチェックしません。また、.xmlファイルの任意の数またはその他の許可タイプを許可しますのファイルを介して。
私はこのコードを改善する前に、これを行うより良い方法があると確信しています。
私はPythonのディレクトリの比較演算子を認識していません。デフォルトのディレクトリパターンに追加された余分なファイルとフォルダの構造を含む辞書のリストのようなものを返すことができます。例えば。
difference = [{'FolderName':['Naughty.txt','illegal.etc'],{'Disobedience':['Here.txt','AndHere.txt']}]
私はデータ構造にディレクトリ構造(またはそれの表現)を読むことから始めます。あなたの有効なディレクトリ構造に似たデータ構造を作成すると、問題は、2つの異なるツリーのノードを比較して子供たちを再帰させる非常に単純な関数になります。 – thebjorn
私はそれをすることができましたが、かなり冗長であるようです。私は1つのライナーのラインに沿ってもっと考えていました - root、dir、os.walk(path)のファイル:dirまたはパターンではないファイル:エラーを返す - しかし、私はいくつかのディレクトリにさまざまな量のファイルを持っています。 – Xeberdee
私はそれが既存のソリューションよりはるかに冗長ではなく、はるかに柔軟性があるとは思わない。別の考え方は、ディレクトリ構造と有効な構造体の複数行文字列バージョンを生成し、次にdifflibを使用してdiffを生成することです。 – thebjorn