【问题标题】:How to filter out unusual names resulted from "os.listdir" [closed]如何过滤掉“os.listdir”导致的异常名称[关闭]
【发布时间】:2021-07-12 16:59:31
【问题描述】:

我使用os.listdir(d) 列出文件夹中的所有文件。有一些奇怪的名字比如

['ᅳ',
 'ᅴ',
 'ᅵ',
 '¢',
 '£',
 '¬',
 ' ̄',
 '¦',
 '¥',
 '₩',
 '←',
 '↑',
 '→',
 '↓',
 '■',
 '○',
 '\ufff9',
 '\ufffa',
 '\ufffb',
 '']

您能否提出任何过滤掉它们的想法?

【问题讨论】:

  • 为什么要过滤它们?显然,该目录中有一些名称奇怪的文件。奇怪的名称是否会使这些文件无法执行您想要执行的任何处理?
  • @user2357112supportsMonica 我知道此类文件的内容不符合我的条件。所以我将它们过滤掉以节省计算量。
  • 你怎么知道的?您要处理的文件的名称是否与某种模式匹配?如果是这样,您可能希望使用该模式来执行过滤。
  • 如果您不指定“奇怪”名称的标准,我们无法帮助您使用过滤它们的代码。

标签: python string unicode


【解决方案1】:

您可以准备一个可接受的字符列表,例如:

acceptables = r'[_,.-]'

然后查看删除这些字符后哪些路径名完全是字母数字:

import os, re

[x for x in os.listdir('.') if re.sub(acceptables, '',x).isalnum()]

请注意,方括号“[]”是定义要忽略的字符集所必需的,它们不是该集的一部分。

【讨论】:

    【解决方案2】:

    您可以在列表中应用过滤器,仅授权常见字符。 类似的东西:

    import os
    import re
    directories = os.listdir('.')
    
    # Before filter
    print(directories)
    
    # Filtered
    d = list(filter(lambda x: re.match("[a-zA-Z\d\_\-]+", x), directories))
    print(d)
    
    Output: 
    Before filter: ['main.py', '¥']
    Filtered: ['main.py']
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      • 2016-08-16
      • 1970-01-01
      • 2015-08-09
      相关资源
      最近更新 更多