python - 如何检查一组文件是否符合命名方案

标签 python validation naming

我有一堆文件(电视剧集,尽管这是相当随意的),我想检查它们是否与特定的命名/组织方案相匹配。

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

然后,我遍历每个有效文件名正则表达式,如果匹配,则将其附加到“有效”字典,如果不匹配,则对缺失的 ep 名称正则表达式执行相同的操作,如果匹配,我将其附加到带有错误代码 (2:'missing epsiode name') 的“无效”字典,如果两者均不匹配,则将其添加为带有“格式错误的名称”错误代码的无效字典。

目前的代码可以查到here

我想添加一个规则来检查每个目录中是否存在 folder.jpg 文件,但添加此规则会使代码在当前状态下变得更加困惑。

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

它需要检查的规则是..

  • 文件格式为 Show Name - [01x23] - Episode Name.aviShow Name - [01xSpecial02] - Special Name.aviShow名称 - [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 也提到了一个很好的方法:

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

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

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

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

这个策略与您的想法一致吗?

关于python - 如何检查一组文件是否符合命名方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19030/

相关文章:

用于 CSV 的 Python MySQLdb 导入 MySQL 表的列数多于 CSV/列表索引超出范围?

forms - yii2 规则不适用于非数据库属性?

c# - 我应该给这两个从一个类(class)拆分出来的类(class)起什么名字?

c++ - "overriding"非虚拟方法的官方术语

Python 不工作?

python - Scrapy 是单线程还是多线程?

python - 无法在我的 Python 项目中使用 Pillow

javascript - Joi 每个验证选项的自定义错误

c# - 接口(interface) IDataErrorInfo 不起作用

.net - 参数命名: filename or fileName?