如何修复模式,该模式用于获取具有标准库glob的文件夹中的文件列表?

时间:2019-02-14 16:52:22

标签: python directory glob

我有以下文件:

/tmp/test_glob/client.log.71.gz
/tmp/test_glob/client.log.63.gz
/tmp/test_glob/client.log.11
/tmp/test_glob/core_dump.log
/tmp/test_glob/client.log.32
/tmp/test_glob/dm.log
/tmp/test_glob/client.log
/tmp/test_glob/client.log.1
/tmp/test_glob/client.log.64.gz

我想获取所有以.gz结尾的.log文件,但文件除外。 所需的结果应该是以下内容:

/tmp/test_glob/client.log.11
/tmp/test_glob/core_dump.log
/tmp/test_glob/client.log.32
/tmp/test_glob/dm.log
/tmp/test_glob/client.log
/tmp/test_glob/client.log.1

我已经编写了以下简单代码:

import glob
import os

glob_pattern = u'*.log*'
for log_path in glob.glob(os.path.join('/tmp/test_glob', glob_pattern)):
    print('log_path: ', log_path)

但是它返回文件夹/ tmp / test_glob /

中的所有文件

我试图像这样修改这种模式:

glob_pattern = u'*.log.[0-9][0-9]'

但仅返回

/tmp/test_glob/client.log.11
/tmp/test_glob/client.log.32

如何修复此模式?

3 个答案:

答案 0 :(得分:1)

使用Pythex(Python正则表达式测试器),匹配字符串

glob_pattern = u'.*(\.log)(?!.*(gz)).*'

为您的目标而努力。

答案 1 :(得分:0)

尝试**/*.log!(*.gz)

Test using globster.xyz

答案 2 :(得分:0)

这不是全局模式。您不需要glob。您想使用re模块函数来过滤os.listdir的结果。