【问题标题】:Finding path names with non-consecutive numbers using glob in Python在 Python 中使用 glob 查找具有非连续数字的路径名
【发布时间】:2019-04-09 19:39:36
【问题描述】:

有没有办法找到数字不连续的文件名?更具体地说,我希望列出包含这些数字的文件名:

path +'*.s201701*.nc'
path +'*.s201801*.nc'
path +'*.s201901*.nc'
path +'*.s201702*.nc'
path +'*.s201802*.nc'
path +'*.s201902*.nc'
path +'*.s201712*.nc'
path +'*.s201812*.nc'
path +'*.s201912*.nc' 

我可以得到“2017”到“2019”的变化,因为这些数字是连续的,但不是“01”、“02”、“12”,因为这些不是。这不起作用:

glob.glob(path +'*.s201[7-9][01,02,12]*.nc'

这行得通,

glob.glob(path +'*.s201[7-9][0-1][1-2]*.nc'

但也给了我s201*11*.nc 中的文件,这是我不想要的。有什么建议吗?

【问题讨论】:

    标签: python python-3.x filepath glob pathname


    【解决方案1】:

    你不能用一个 glob 做到这一点 - 语言还不够复杂 - 但你可以用两个做到这一点:

    glob.glob(path +'*.s201[7-9]0[1-2]*.nc') + glob.glob(path +'*.s201[7-9]12*.nc')
    

    【讨论】:

      【解决方案2】:

      您可以在结果表单 os.listdir 上使用正则表达式检查重复数字。我在与脚本相同的目录中创建了一个示例文件,它有重复的数字。使用第一种方法返回一个空列表。删除列表推导中的“not”会返回有问题的文件名。

      import os
      import re
      
      files = [f for f in os.listdir(path) if not re.search(r'(\d)\1+\b', f)]
      
      print(files)
      []
      

      删除“不”以查找重复数字:

      files = [f for f in os.listdir(path) if re.search(r'(\d)\1+\b', f)]
      print(files)
      ['s201911.txt']
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多