2008-08-20 9 views
2

命名体系に準拠します:私は3つの正規表現の配列を持っています。一つは有効なファイル名、一つはエピソード名がないファイル、もう一つは有効なパスです。現在</p> <p>..私は、ファイルの束を持って

次に、それぞれの有効なファイル名の正規表現はループしますが、一致すれば "有効な" dictに追加します。そうでなければ、missing-ep-name正規表現で同じ処理を行いますエラーコード(2: 'missing epsiode name')で「無効」ディクトに変換し、一致しない場合は、「不正名型」エラーコードで無効になります。現在のコードは、私が各ディレクトリ内folder.jpgファイルの存在をチェックするルールを追加し、これを追加したいhere

は、コードが実質的により厄介なことの電流になるだろう

を見つけることができます状態..

私はこのシステムをもっと拡張可能な方法で書くことができますか?

それは次のようになりますチェックする必要があるルールを...

  • ファイル形式であるShow Name - [01x23] - Episode Name.aviまたはShow Name - [01xSpecial02] - Special Name.aviまたは
  • ファイル名は形式Show Name - [01x23].avi表示になっている場合Show Name - [01xExtra01] - Extra Name.aviそれの「行方不明エピソード名」セクション出力
  • パスは(シーズン2は、ファイル名に正しいシーズン番号でなければならない)形式Show Name/season 2/the_file.avi
  • Show Name/season 1/
  • 各フォルダ内にあるべきです"folder.jpg"を含める必要があります

すべてのアイデア?私はテレビ番組をチェックしようとしているが、この概念/コードは、多くのものには適用することができるはず..私が持っていた

だけの思考は形式でdictsのリストだった:多分

checker = [ 
{ 
    'name':'valid files', 
    'type':'file', 
    'function':check_valid(), # runs check_valid() on all files 
    'status':0 # if it returns True, this is the status the file gets 
} 

答えて

2

は私が..

を 各ディレクトリ内folder.jpgファイルの存在をチェックするルールを追加するが、これは 、実質的により 乱雑それのコードは、現在の状態だなるだろう追加します

これは悪くはありません。実際には、あなたの現在のコードは非常にうまくそれをしない、とスヴェンは同様にそれを行うには良い方法を述べた:

  1. は、すべてのファイルのリストを取得し、「必要な」ファイルのための
  2. チェック

checker = { 
    ... 
    'required': ['file', 'list', 'for_required'] 
} 

を限りこれを行うには良い/拡張可能な方法があるとして:あなたは自分の辞書に必要なファイルのリストを追加しているだろうか?私は確信していません。私は実際には、 "複数の"正規表現を削除し、デリミタを使用するというSvenのアイデアを取り除く方法を考えるしかありませんでした。だから、私の戦略は次のように辞書を定義することです(そして、私はPythonの構文を知らないと申し訳なく思っていますが、それを調べるのは怠惰ですが、それは意味をなさないでしょう)/ regex /は正規表現):

check_dict = { 
    'delim' : /\-/, 
    'parts' : [ 'Show Name', 'Episode Name', 'Episode Number' ], 
    'patterns' : [/valid name/, /valid episode name/, /valid number/ ], 
    'required' : ['list', 'of', 'files'], 
    'ignored' : ['.*', 'hidden.txt'], 
    'start_dir': '/path/to/dir/to/test/' 
} 
  1. は、区切り文字に基づいてファイル名を分割します。
  2. 各部品を確認してください。

どのような部分が欠落しているかを特定することができ、セクションにパターンが一致しないと、そのパターンが不正です。ここで、partspatternsは、1対1の比率を持っています。辞書の代わりに2つの配列が順序を強制します。

無視され、必要なファイルが一覧表示されます。 ...ファイルは自動的に無視されるはずです。ユーザーは、シェル展開可能な "globs"を入力する必要があります。私はここでsvn:ignoreのプロパティを考えていますが、ファイルをリストするのは自然です。

ここでstart_dirは現在のディレクトリのデフォルトになりますが、1つのファイルに複数のディレクトリの自動テストを実行したい場合は、これが便利です。

実際の緩い終わりは、パステンプレートと同じ行に沿って、「有効なファイル」に必要なパスです。 1つの大きな正規表現を書いたり、そこからグループを取ったりしなくても、テンプレートを作成することなく、確かなアイデアを思いつくことはできませんでした。 TextMate言語の文法を書いているような感じでした。しかし、それは使いやすさに迷い始めます。実際の問題は、パステンプレートがpartsで構成されていないことです。これは意味がありますが、複雑さを増します。

この戦略は、あなたが考えていたものと調和していますか?

0

"ファイル名が正しい"というアプローチをとって、そのステートメントを反証するためにそこから作業してください:

ファイル名に 'show name'、 'season number x episode number'と 'エピソード名'は、これらの項目を " - "(ダッシュ)で区切って、ファイル名が正しいものを2つ持つ必要があることを確かに知っています。
これがチェックアウトされている場合は、コードを使用して、表示名が親の親フォルダに表示されている表示名と一致することを確認できます(大文字と小文字は区別されません)。余分な0が先頭に追加されます)。

あなたはダッシュの正しい金額が表示されていない、しかし、あなたはすぐに何かが間違っていることを知って、テストなど

を、残りの前に停止して、個別にファイルfolder.jpgが存在するかどうかを確認して取ることができるかどうか必要な行動。 またはを実行し、そのファイルをそのフォルダ内の残りのファイルからフィルタリングします。

関連する問題