【问题标题】:Why do both fnmatch and glob exist?为什么 fnmatch 和 glob 都存在?
【发布时间】:2021-07-14 04:41:06
【问题描述】:

我已经有了一些线索,但由于我无法在任何地方找到清晰简洁的答案,我认为它可能也会对其他人有所帮助。

Python中有两个模块做文件名匹配,分别是fnmatchglob

除其他外,两者之间的区别之一是 fnmatch 不会将以句点开头的文件名视为隐藏文件名。然而,它们似乎仍然执行相对相似的任务,这让我想知道为什么它们被拆分为两个独立的模块,而不是一个具有组合功能的模块。

这种分裂是否有充分的理由,或者仅仅是因为 Python 的历史原因?

【问题讨论】:

  • 我自己不是很熟悉,但根据this answerglob 将路径分成目录和文件名后,它在内部继续使用fnmatch 分析每个部分。
  • fnmatch() 仅将一个文件与模式匹配并返回一个布尔值。 glob.glob() 返回所有匹配文件的列表。
  • fnmatch 独立于任何文件系统 - 例如,您可以将它与来自数据库的文件名列表一起使用。注意glob实际上使用fnmatch

标签: python match


【解决方案1】:

fnmatch() 只匹配一个文件名与模式,返回TrueFalse. If you want a list of matching filenames you need to write your own code that calls os.listdir()`。

glob.glob() 将模式与目录中的所有名称匹配。它允许在目录部分使用通配符,并且它将在每个目录级别进行匹配。如果您使用recursive=True 选项,您可以在目录部分使用** 让它自动遍历目录(如os.walk()),寻找与其余部分匹配的任何内容。

所以glob.glob() 是一个更高级别的便利函数,它隐藏了很多细节。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多