This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (
Help us improve Python packaging - Donate today!

Version of the glob module that can capture patterns and supports recursive wildcards

Project Description

This is an extended version of Python’s builtin glob module ( which adds:

  • The ability to capture the text matched by glob patterns, and return those matches alongside the filenames.
  • A recursive ‘**’ globbing syntax, akin for example to the globstar option of the bash shell.
  • The ability to replace the filesystem functions used, in order to glob on virtual filesystems.
  • Compatible with Python 2 and Python 3 (tested with 3.3).

It’s currently based on the glob code from Python 3.3.1.


Matches being returned:

import glob2

for filename, (version,) in glob2.iglob('./binaries/project-*.zip', with_matches=True):
    print version

Recursive glob:

>>> import glob2
>>> all_header_files = glob2.glob('src/**/*.h')
['src/fs.h', 'src/media/mp3.h', 'src/media/mp3/frame.h', ...]

Note that ** must appear on it’s own as a directory element to have its special meaning. **h will not have the desired effect.

** will match “.”, so **/*.py returns Python files in the current directory. If this is not wanted, */**/*.py should be used instead.

Custom Globber:

from glob2 import Globber

class VirtualStorageGlobber(Globber):
    def __init__(self, storage): = storage
    def listdir(self, path):
        # Must raise os.error if path is not a directory
    def exists(self, path):
    def isdir(self, path):
        # Used only for trailing slash syntax (``foo/``).
    def islink(self, path):
        # Used only for recursive glob (``**``).

globber = VirtualStorageGlobber(sftp_storage)

If isdir and/or islink cannot be implemented for a storage, you can make them return a fixed value, with the following consequences:

  • If isdir returns True, a glob expression ending with a slash will return all items, even non-directories, if it returns False, the same glob expression will return nothing.
  • Return islink True, the recursive globbing syntax ** will follow all links. If you return False, it will not work at all.
Release History

Release History

This version
History Node


History Node


History Node


History Node


History Node


Download Files

Download Files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
glob2-0.5-py2.py3-none-any.whl (8.6 kB) Copy SHA256 Checksum SHA256 2.7 Wheel Nov 4, 2016
glob2-0.5.tar.gz (10.1 kB) Copy SHA256 Checksum SHA256 Source Nov 4, 2016

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting