python执行shell命令,路径中带有通配符

时间:2012-08-30 14:13:16

标签: python regex shell path

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

2 个答案:

答案 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所解释的那样。