代码之家  ›  专栏  ›  技术社区  ›  Stacey

通配符文件路径比较

  •  -1
  • Stacey  · 技术社区  · 6 年前

    我有一个包含多个子文件夹的文件夹:

    C:/Users/stacey/WorkDocs/port_a\port_1m
    C:/Users/stacey/WorkDocs/port_a\job_lists
    C:/Users/stacey/WorkDocs/port_a\job_lists_bu
    C:/Users/stacey/WorkDocs/port_a\job_lists_bu2
    C:/Users/stacey/WorkDocs/port_a\roll_185_oe_2018-09-07
    C:/Users/stacey/WorkDocs/port_a\roll_186_oe_2018-09-14
    C:/Users/stacey/WorkDocs/port_a\roll_187_oe_2018-09-21
    C:/Users/stacey/WorkDocs/port_a\roll_4_oe_2015-03-20
    C:/Users/stacey/WorkDocs/port_a\roll_5_oe_2015-03-27
    C:/Users/stacey/WorkDocs/port_a\roll_6_oe_2015-04-03
    

    如果路径中的最后一个文件夹以“roll”开头,我想询问这些文件夹。我正在尝试使用以下方法查找文件夹:

    def main():
    
     folder = 'C:/Users/stacey/WorkDocs/port_a\'
    
        for dirname, dirs, files in os.walk(folder):
    
            if dirname == folder+'\roll_*':
                print('dirname')
    

    因此,当前的预期输出如下所示:

    C:/Users/stacey/WorkDocs/port_a\roll_185_oe_2018-09-07
    C:/Users/stacey/WorkDocs/port_a\roll_186_oe_2018-09-14
    C:/Users/stacey/WorkDocs/port_a\roll_187_oe_2018-09-21
    C:/Users/stacey/WorkDocs/port_a\roll_4_oe_2015-03-20
    C:/Users/stacey/WorkDocs/port_a\roll_5_oe_2015-03-27
    C:/Users/stacey/WorkDocs/port_a\roll_6_oe_2015-04-03
    

    然而,我没有得到任何输出。我想可能是我设置的通配符比较不正确,但我不确定。如何返回所需的输出?

    1 回复  |  直到 5 年前
        1
  •  1
  •   adrtam    6 年前

    两个问题。首先,记住在有斜杠时使用原始字符串,如下所示:

    folder = r'C:/Users/stacey/WorkDocs/port_a\'
    

    其次,你不能指望Python知道你的globbing语法 == 比较但是,在进行前缀匹配时,只需检查前缀:

    for dirname, dirs, files in os.walk(folder):
        if dirname.startswith(folder+r'\roll_'):
            print('dirname')
    

    但实际上,你可以简单地使用 glob Python中的模块来完成所有这些循环:

    import glob
    for dirname in glob.glob(folder+r'\roll_*'):
        print(dirname)