1

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

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

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

4

3 回答 3

1

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

for file_source in [x for x in fnmatch.filter(os.listdir(source_dir), "*.csv") if 'Test' not in x ] :
     pass
于 2018-03-07T14:54:03.577 回答
0

像这样的东西怎么样:

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
于 2018-03-07T15:10:01.457 回答
0

我不熟悉 fnmatch 但我试过了

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

它工作得很好。您还可以按照 Chris 的建议使用列表理解。

于 2018-03-07T14:56:16.730 回答