【发布时间】:2020-01-28 21:36:00
【问题描述】:
将此路径与提供的 glob 样式模式匹配。匹配成功返回True,否则返回False
在此路径表示的目录中全局化给定模式,产生所有匹配的文件(任何类型):
问题一
那么为什么下面的断言失败了?
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