【问题标题】:Exclude files with fnmatch使用 fnmatch 排除文件
【发布时间】:2018-08-15 17:08:24
【问题描述】:

我正在 Python 中创建一个循环,该循环使用fnmatch.filter() 遍历特定目录中的所有文件。目前我正在浏览特定文件夹中的所有 .csv 文件,如下所示:

for file_source in fnmatch.filter(os.listdir(source_dir), "*.csv")

我想做的是排除带有“Test*”模式的文件。这是否可能与fnmatch有关。在最坏的情况下,我只会创建另一个内部 if 循环,但更喜欢更简洁的解决方案。

【问题讨论】:

标签: python file fnmatch


【解决方案1】:

这样的事情怎么样:

import re
import os

for file in os.listdir('./'):
    rex   = '^((?!Test).)*\.csv$'
    reobj = re.compile(rex)
    obj = reobj.match(file)
    if obj != None:
        print obj.string

【讨论】:

    【解决方案2】:

    我不熟悉 fnmatch 但我试过了

       if fnmatch.fnmatch(file, 'Test*'):
           print(file)
    

    而且一切正常。您还可以按照 Chris 的建议使用列表理解。

    【讨论】:

    • 你好。这个实际上应该只打印名称中有“Test*”模式的文件。我想做的实际上是将它们从列表中排除。正如您在评论中提到的那样,克里斯提到的事情成功了。
    【解决方案3】:

    您可以使用列表推导来过滤文件名:

    for file_source in [x for x in fnmatch.filter(os.listdir(source_dir), "*.csv") if 'Test' not in x ] :
         pass
    

    【讨论】:

      猜你喜欢
      • 2011-12-09
      • 1970-01-01
      • 2017-05-12
      • 1970-01-01
      • 1970-01-01
      • 2014-11-16
      • 2017-12-16
      • 2019-12-23
      • 2019-12-26
      相关资源
      最近更新 更多