在 Linux 上忽略 glob() 中的大小写

新手上路,请多包涵

我正在编写一个脚本,该脚本必须处理由 Windows 和 Linux 用户手动修改的目录。 Windows 用户在分配文件名时往往根本不关心大小写。

有没有办法在 Python 的 Linux 端处理这个问题,即我可以获得不区分大小写的类似 glob 的行为吗?

原文由 andreas-h 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

使用不区分大小写的正则表达式而不是 glob 模式。 fnmatch.translate 从全局模式生成正则表达式,所以

re.compile(fnmatch.translate(pattern), re.IGNORECASE)

为您提供不区分大小写的 glob 模式版本作为已编译的 RE。

请记住,如果文件系统由类 Unix 文件系统上的 Linux 机器托管,用户将能够创建文件 foo , FooFOO 在同一目录中。

原文由 Fred Foo 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以将每个字母字符 c 替换为 [cC],通过

import glob
def insensitive_glob(pattern):
    def either(c):
        return '[%s%s]' % (c.lower(), c.upper()) if c.isalpha() else c
    return glob.glob(''.join(map(either, pattern)))

原文由 Geoffrey Irving 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题