Несоответствие между PurePath.match (pattern) и Path.glob (pattern) - PullRequest
0 голосов
/ 29 сентября 2019

Если PurePath.match (pattern) делает

Сопоставьте этот путь с предоставленным шаблоном glob-стиля.Вернуть True, если сопоставление прошло успешно, иначе False

и Path.glob (pattern) будет

Перетаскивать данный шаблон в каталог, представленный какэтот путь, в котором приводятся все совпадающие файлы (любого типа):

Вопрос-1

Тогда почему приведенное ниже утверждение не выполняется?

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?

Question-2

Как мы можем изменить шаблон PurePath.match, чтобы убедиться, что утверждение не ошибается.

NB рекурсивный шаблон не может Path.match файлы по базовому пути, которые сопоставляются и возвращаются Path.glob.Похоже, это наблюдаемое несоответствие между двумя API.

QnA

Q: Можете ли вы привести пример конкретного пути, который появляется в файлах запроса, но не в файлах с фильтром?

A:

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')]

1 Ответ

0 голосов
/ 29 сентября 2019

Path.glob и Path.match поддерживаются разными реализациями glob с разным поведением.В частности, Path.match не поддерживает **.

Это странно и непоследовательно и, вероятно, изначально не предназначалось, но я не знаю, изменят ли они это.

...