【问题标题】:How to fix pattern, that I use to get list of files in folder with standard library glob?如何修复模式,我用标准库 glob 获取文件夹中的文件列表?
【发布时间】:2019-07-08 18:32:29
【问题描述】:

我有以下文件:

/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

我想获取所有 .log 文件,但以 .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

我写了这个简单的代码:

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

如何修复这种模式?

【问题讨论】:

    标签: python directory glob


    【解决方案1】:

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

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

    为您的目标工作得很好。

    【讨论】:

    • 感谢您的回答,但没有奏效。此模式不返回任何文件。
    • 这是re。它不是全局模式;尝试将它与 glob 一起使用是行不通的。但如果使用re 模块进行过滤而不是使用全局翻译器,这是一种解决方案。
    【解决方案2】:

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

    Test using globster.xyz

    【讨论】:

    • 这是一个 bash extglob,不是 Python glob 模块支持的东西
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2019-05-28
      • 2015-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 2020-01-13
      • 1970-01-01
      相关资源
      最近更新 更多