【问题标题】:Python: Open all files that do not match a patternPython:打开所有不匹配模式的文件
【发布时间】:2014-10-10 10:33:59
【问题描述】:

我正在尝试打开目录中与模式不匹配的所有文件。该目录将包含x_0192910y_18329123z_00000000 等文件;我想打开所有不以'00000000'结尾的文件,八个零。我一直在尝试使用glob.glob(),但我无法正确使用正则表达式。我尝试过*^0{8,8}*[!0] 之类的方法,但我不确定如何构造正确的表达式。

总而言之,我只需要glob.glob('not *_00000000') 之类的东西。有人可以帮忙吗?

【问题讨论】:

  • 正则表达式^(?!.*?0{8}$).+$
  • 请注意,全局模式不是正则表达式。

标签: python glob


【解决方案1】:

您是否考虑过过滤glob 返回的列表?比如:

for e in glob.glob('*'):
    if e[-9:] == "_00000000":
        continue
    # Do whatever you like

【讨论】:

    【解决方案2】:

    你可以使用endswith和filter:

    import glob
    for i in filter(lambda x:not x.endswith('_00000000'), glob.glob('*.*')):
        print i
    

    你也可以使用列表推导:

    import glob
    for i in [e for e in glob.glob('*.*') if not e.endswith('_00000000')]:
        print i
    

    【讨论】:

    • 我很想将该字符串写成'_'+8*'0';它并没有短多少,但更容易看出正好有八个零。
    【解决方案3】:

    Glob 与正则表达式有着根本的不同。

    您可以获得的最接近的可能是“最后 8 个字符中没有 '0'”。如果这还不够好,您只需获取完整列表并使用endswith 进行过滤。

    FWIW,glob 模式规则是:

    * match 0 or more "any character"
    ? match exactly one "any character"
    [...] match character range
    [!...] negated character range (all but the chars in the range
    

    【讨论】:

      猜你喜欢
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      • 1970-01-01
      相关资源
      最近更新 更多