【问题标题】:python execute shell command with wildchar in pathpython在路径中使用通配符执行shell命令
【发布时间】:2012-08-25 07:12:17
【问题描述】:
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

【问题讨论】:

    标签: python regex shell path


    【解决方案1】:

    [] 括在[] 中。

    重击:

    test $ ls
    [cc]a.txt test.dat  test.gp   test.py
    

    蟒蛇:

    >>> glob.glob(r'[[]cc[]]*.txt') #yuck ...
    ['[cc]a.txt']
    

    就通配而言,[ something] 表示匹配方括号之间的任何字符。所以[cc]*.txt 等价于c*.txt,这不是你想要的。

    当然,更强大的解决方案是停止命名包含全局字符的文件;^)。

    【讨论】:

    • 如果不使用 glob.glob 。如何使用其他方法可以示例使用'['来匹配?
    • @yanxinyou -- 我不确定你在问什么。如果您正在寻找不同的选项,您可以使用 os.listdir 并根据手动正则表达式过滤结果...
    • 谢谢。我想用 [somethins]* 来匹配一些文件。然后移动它。我使用 [[] 替换 [ 和 []] 到 ] 。它工作正常。
    【解决方案2】:

    很遗憾,您不能简单地转义 *、?、[、] 字符。授予http://bugs.python.org/issue8402

    fnmatch.translate 的文档,这是最终得到的 称为,说:没有办法引用元字符。对不起。

    解决方案更复杂,正如 mgilson 所解释的那样。

    【讨论】:

    • 不错。感谢您跟踪这方面的文档。 (+1)
    猜你喜欢
    • 2016-08-08
    • 2014-03-02
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 2022-12-06
    相关资源
    最近更新 更多