Skip to content

demurgos/py-pathmatch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pathmatch

Python implementation of git's wildmatch and POSIX.1-2008 fnmatch.

The aim of this package is to provide a file matching module complying with the POSIX standard and allow compatibility with git.

Example

from pathmatch import wildmatch

# Pattern matching auto-generated test files (extension .pyc, .pyo or .pyd inside tests/)
pattern = u'tests/**/*.py[cod]'

# Match single files:
wildmatch.match(pattern, u'tests/auto.pyc')  # True
wildmatch.match(pattern, u'auto.pyc')  # False

# Filter a collection:
files = [
    u'tests/deep/auto.pyd',
    u'tests/module.py',
    u'package/auto.pyc',
    u'tests/auto.pyo'
]
list(wildmatch.filter(pattern, files))  # [u'tests/deep/auto.pyd', u'tests/auto.pyo']

# Compile a pattern
compiled = wildmatch.WildmatchPattern(pattern)

compiled.match(u'tests/')  # False

Features

wildmatch support

Currently, the following wildmatch features are supported:

  • Wildstar ** operator and associated semantics (/ requires a literal match)
  • Literal matching
  • Question mark ? (any character) and asterisk * (any string) operators
  • Bracket expressions [abc] (character alternatives)

Bracket expression features:

  • Negation (supports both ^ and ! meta-characters)
  • Range expressions a-z
  • Collation Symbol [.ch.]
  • Equivalence classes syntax [=e=], but fallback to collation symbol semantics
  • Supports the path_name flag to exclude / (which requires a literal match)

See test_wildmatch.py for more details.

Limitations:

  • case_fold (case insensitive) option is not supported
  • period (require literal match for leading period) option is not supported
  • Negated bracket expression with multi-character collating elements are not supported
  • Character classes [:alpha:] for bracket expressions are not supported

Contributions are welcomed

fnmatch support

The dedicated fnmatch module is not yet configured (this should just be a subset of wildmatch).

Contributing

Tests

You can execute the tests with the following command:

python -m unittest discover -s . -p test*.py

References:

License

MIT License, Copyright (c) 2016 Charles Samborski

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages