【问题标题】:Filter file list in python/ lowercase and uppercase extension filespython/小写和大写扩展文件中的过滤文件列表
【发布时间】:2013-07-21 21:52:40
【问题描述】:

我正在使用这一行过滤我的文件列表:

MyList = filter(lambda x: x.endswith(('.doc','.txt','.dat')), os.listdir(path))

上面的行将只过滤小写扩展文件。因此,有没有一种优雅的方法让它也过滤大写扩展文件?

【问题讨论】:

    标签: python-3.x filter lambda


    【解决方案1】:

    您只需将.lower() 添加到您的 lambda 函数中

    MyList = filter(lambda x: x.lower().endswith(('.doc','.txt','.dat')), os.listdir(path))
    

    我更喜欢将os.path.splitext 与列表理解一起使用

    from os.path import splitext
    my_list = [x for x in os.listdir(path) if splitext(x)[1].lower() in {'.doc', '.txt', '.dat'}]
    

    单行还是有点多,所以也许

    from os.path import splitext
    
    def valid_extension(x, valid={'.doc', '.txt', '.dat'}):
        return splitext(x)[1].lower() in valid
    
    my_list = [x for x in os.listdir(path) if valid_extension(x)]
    

    【讨论】:

      【解决方案2】:
      import os
      import re
      pat = re.compile(r'[.](doc|txt|dat)$', re.IGNORECASE)
      filenames = [filename for filename in os.listdir(path)
                   if re.search(pat, filename)]
      print(filenames)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-12
        • 2016-04-03
        • 1970-01-01
        • 2012-11-17
        • 2018-10-28
        • 2018-05-16
        相关资源
        最近更新 更多