ls
[cc]a.txt bba.txt [cc]b.txt bbb.txt
ipython
glob.glob("[cc]*")
[]
glob.glob("bb*")
['bba.txt','bbb.txt']
glob.glob("[bb]*")
['bba.txt','bbb.txt']
如何使[cc]a.txt
和[cc]b.txt
匹配? [
中的字符[bb]*
似乎毫无意义。使用如:
glob.glob("\[cc\]*")
[]
也是NULL
答案 0 :(得分:5)
将[
和]
括在[]
。
击:
test $ ls
[cc]a.txt test.dat test.gp test.py
蟒:
>>> glob.glob(r'[[]cc[]]*.txt') #yuck ...
['[cc]a.txt']
就globbing而言,[ something]
表示匹配方括号之间的任何字符。所以[cc]*.txt
相当于c*.txt
,这不是你想要的。
当然,一个更强大的解决方案是停止命名带有glob字符的文件; ^)。
答案 1 :(得分:3)
不幸的是,你不能简单地逃避*,?,[,]字符。授予http://bugs.python.org/issue8402:
fnmatch.translate的文档,这是最终得到的 叫,说:没有办法引用元字符。遗憾。
解决方案更复杂,正如mgilson所解释的那样。