megvii-research/megfile

`**/*.{mp4,avi}` not working

Closed this issue · 2 comments

之前 megfile 支持上面这种带 {} 的语法,但之后的某个版本弄挂了,可能挂了有一段时间了

看了下代码,整个故事似乎是:

  1. https://github.com/megvii-research/megfile/blob/main/megfile/smart.py#L814 这里对 protocol 做了一次 group by,用到了 ungloblize / globlize;**/*.{mp4,avi} 经过上述翻译后会变成 **/{*.mp4,*.avi}
  2. https://github.com/megvii-research/megfile/blob/main/megfile/lib/fnmatch.py#L74 目前 translate 实现会认为 {} 内部的是字面值,**/{*.mp4,*.avi} 表示名为 *.mp4 或 *.avi 的文件

修复方案:

  1. 最挫但最简单的法子:_group_glob 特判一下如果 group 后的 list 长度为 1,即只有一个 propocol 的时候返回原字符串,但这种解法只能算 workaround,多 propocol 的 glob 表达式还是不对
  2. 修 ungloblize / globlize,感觉很难,甚至没想到怎么修
  3. 修 translate,认为 {} 内部不是字面值,可以支持例如 * ? 等符号,但暂时不支持嵌套使用 {} 了要不太复杂

建议通过 3 来修,我开个 PR ?

👌 麻烦帮修一下,最好加点 test

3.1.4 已经发版了