Source code for ship.utils.dbfread.ifiles

"""
Functions for dealing with mixed-case files from case-preserving file
systems.

Todo:

  - handle patterns that already have brackets
"""

from __future__ import print_function
import os
import glob
import fnmatch


[docs]def ipat(pat): """Convert glob pattern to case insensitive form.""" (dirname, pat) = os.path.split(pat) # Convert '/path/to/test.fpt' => '/path/to/[Tt][Ee][Ss][Tt].[]' newpat = '' for c in pat: if c.isalpha: u = c.upper() l = c.lower() if u != l: newpat = newpat + '[' + u + l + ']' else: newpat += c else: newpat += c newpat = os.path.join(dirname, newpat) return newpat
[docs]def ifnmatch(name, pat): """Case insensitive version of fnmatch.fnmatch()""" return fnmatch.fnmatch(name, ipat(pat))
[docs]def iglob(pat): """Case insensitive version of glob.glob()""" return glob.glob(ipat(pat))
[docs]def ifind(pat, ext=None): """Look for a file in a case insensitive way. Returns filename it a matching file was found, or None if it was not. """ if ext: pat = os.path.splitext(pat)[0] + ext files = iglob(pat) if files: return files[0] # Return an arbitrary file else: return None
__all__ = ['ipat', 'ifnmatch', 'iglob', 'ifind']