2008-08-20 56 views
2

我有一大堆的文件(电视节目,尽管这是相当任意的),我要检查符合特定的命名/组织方案..如何检查设置文件的符合命名方案

目前:我有三个正则表达式数组,一个用于有效的文件名,一个用于缺少剧集名称的文件,另一个用于有效路径。

然后,我循环虽然每个有效的文件名正则表达式,如果匹配,将它附加到一个“有效”的字典,如果没有,做同样的missing-ep名称正则表达式,如果它匹配我附加它到一个带有错误代码(2:'缺少epsiode名称')的“无效”字典,如果它们都不匹配,那么它会被添加到无效并带有'格式错误的名称'错误代码。

当前的代码可以发现here

我想补充一点,检查每个目录folder.jpg文件存在的规则,但要加这将使得代码大幅较为凌乱,在它的电流状态..

我怎样才能以更可扩展的方式编写这个系统?

需要检查将是规则..

  • 文件的格式为Show Name - [01x23] - Episode Name.aviShow Name - [01xSpecial02] - Special Name.aviShow Name - [01xExtra01] - Extra Name.avi
  • 如果文件名格式为Show Name - [01x23].avi显示它的“失踪事件名称”部分输出
  • 的路径应该是在格式Show Name/season 2/the_file.avi(其中季2应该是在文件名中正确季节数)
  • 每个Show Name/season 1/夹应该包含“folder.jpg”

。任何想法?当我试图检查的电视节目,这个概念/代码应该可以适用于很多东西..

我唯一的想法就是http://stardict.sourceforge.net/Dictionaries.php下载的格式列表:

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的比率。两个数组而不是一个字典强制执行顺序。

可以列出忽略和必需的文件。应该可能会自动忽略...文件。用户应该被允许输入可以被扩展的“globs”。我在这里想到svn:ignore属性,但globbing对于列出文件来说很自然。

这里start_dir将默认为当前目录,但如果您希望单个文件运行一组目录的自动化测试,这将是有用的。

这里真正的松散结束是路径模板,沿着相同的线路,“有效文件”需要什么路径。如果不写一个大规模的正则表达式并从中获取团体...我就无法提出一个坚实的想法来构建一个模板。这感觉很像编写TextMate语言语法。但是这开始偏离了易用性。真正的问题是路径模板不是由parts组成的,这是有道理的,但增加了复杂性。

这个策略是否与你所想的一致?

0

也许你应该采取默认的方式:“文件名是正确的”,并从那里工作,以反驳该声明:

与事实,你只允许文件名:'显示名称','季节号x情节号'和'episode name',你肯定知道这些项目应该用“ - ”(破折号)隔开,所以你必须有2个文件名才是正确的。
如果检查出来,你可以使用你的代码来检查显示名称是否与父母的父文件夹中显示的显示名称匹配(大小写不敏感,我假设),季节编号与父文件夹数值相匹配(有或没有额外0前置)。

然而,如果你没有看到破折号正确数量的你即刻知道,有一些错误和测试等

的其余部分之前停止,并分别可以检查文件是否存在folder.jpg,并采取必要的行动。 先执行该操作,然后从该文件夹中的其余文件中过滤该文件。

相关问题