【问题标题】:Disparity between PurePath.match(pattern) and Path.glob(pattern)PurePath.match(pattern) 和 Path.glob(pattern) 之间的差异
【发布时间】:2020-01-28 21:36:00
【问题描述】:

如果PurePath.match(pattern)

将此路径与提供的 glob 样式模式匹配。匹配成功返回True,否则返回False

Path.glob(pattern)

在此路径表示的目录中全局化给定模式,产生所有匹配的文件(任何类型):

问题一

那么为什么下面的断言失败了?

query_files = Path('../').glob("sql-queries/**/*.sql")
filtered_files = [fname for fname in query_files if fname.match("sql-queries/**/*.sql")]
assert query_files == filtered_files # This assertion fails?

问题 2

我们如何修改PurePath.match 模式,以确保断言不会失败。

NB 递归模式无法Path.match Path.glob 匹配并返回的基本路径下的文件。这似乎是两个 API 之间可观察到的差异。

QnA

问:您能否举例说明出现在 query_files 但未过滤的文件中的特定路径?

答:

query_files = <class 'list'>: [
                    PosixPath('../sql-queries/combined_gv.sql'), 
                    PosixPath('../sql-queries/gv_with_merchant.sql'), 
                    PosixPath('../sql-queries/merchant_dimension.sql'), 
                    PosixPath('../sql-queries/gen_test_data/combined_gv.sql'),
                    PosixPath('../sql-queries/gen_test_data/merchant_dimension.sql')]
filtered_files = <class 'list'>: [
                    PosixPath('../sql-queries/gen_test_data/combined_gv.sql'),
                    PosixPath('../sql-queries/gen_test_data/merchant_dimension.sql')]

【问题讨论】:

  • 您能否举一个具体路径的示例,该路径出现在query_files 而不是filtered_files
  • @user2357112:查看我的编辑。已通过示例回答了您的评论
  • @user2357112 请注意,Path.glob('*') 包括点前缀路径,例如 .hidden.txt,与 glob.glob 不同。另见stackoverflow.com/questions/49862648/…Python issue 26096(GvR 认为这是一项功能);这可能与此有关。

标签: python python-3.x pathlib


【解决方案1】:

Path.globPath.match 由具有不同行为的不同 glob 实现支持。特别是Path.match 不支持**

这很奇怪且不一致,可能不是最初的打算,但我不知道他们是否会改变它。

【讨论】:

    猜你喜欢
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 2010-11-09
    • 2015-11-12
    相关资源
    最近更新 更多