我有一堆文件(电视剧集,尽管这是相当随意的),我想检查它们是否与特定的命名/组织方案相匹配。
目前:我有三个正则表达式数组,一个用于有效文件名,一个用于缺少剧集名称的文件,一个用于有效路径。
然后,我遍历每个有效文件名正则表达式,如果匹配,则将其附加到“有效”字典,如果不匹配,则对缺失的 ep 名称正则表达式执行相同的操作,如果匹配,我将其附加到带有错误代码 (2:'missing epsiode name') 的“无效”字典,如果两者均不匹配,则将其添加为带有“格式错误的名称”错误代码的无效字典。
目前的代码可以查到here
我想添加一个规则来检查每个目录中是否存在 folder.jpg 文件,但添加此规则会使代码在当前状态下变得更加困惑。
我怎样才能以更具扩展性的方式编写这个系统?
它需要检查的规则是..
- 文件格式为
Show Name - [01x23] - Episode Name.avi
或Show Name - [01xSpecial02] - Special Name.avi
或Show名称 - [01xExtra01] - 额外名称.avi
- 如果文件名的格式为
Show Name - [01x23].avi
将其显示为输出的“缺失剧集名称”部分 - 路径的格式应为
Show Name/season 2/the_file.avi
(其中 season 2 应该是文件名中正确的季号) - 每个
Show Name/season 1/
文件夹应包含“folder.jpg”
.有什么想法吗?当我尝试检查电视剧集时,这个概念/代码应该可以应用于很多事情..
我唯一的想法是格式的字典列表:
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
}
最佳答案
I want to add a rule that checks for the presence of a folder.jpg file in each directory, but to add this would make the code substantially more messy in it's current state..
这看起来不错。事实上,您当前的代码做得非常好,Sven 也提到了一个很好的方法:
- 获取所有文件的列表
- 检查“必需”文件
您只需将所需文件的列表添加到您的字典中即可:
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/'
}
- 根据分隔符拆分文件名。
- 检查每个部分。
因为它是一个有序列表,您可以确定缺少哪些部分,如果某个部分与任何模式不匹配,则它是格式错误的。这里的 parts
和 patterns
的比例是 1 比 1。两个数组而不是字典强制执行此顺序。
可以列出忽略的和需要的文件。 .
和 ..
文件应该会被自动忽略。应该允许用户输入可以在 shell 中扩展的“globs”。我在这里想到的是 svn:ignore
属性,但是通配对于列出文件来说是很自然的。
此处 start_dir
将默认为当前目录,但如果您希望单个文件运行一组目录的自动测试,这将很有用。
这里真正的松散端是路径模板,沿着相同的路线,“有效文件”需要什么路径。如果不编写一个大型正则表达式并从中提取组……构建模板,我真的无法想出一个可靠的想法。感觉很像编写 TextMate 语言语法。但这开始偏离易用性。真正的问题是路径模板不是由 部分
组成的,这有道理但增加了复杂性。
这个策略与您的想法一致吗?
关于python - 如何检查一组文件是否符合命名方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19030/