PageRenderTime 674ms CodeModel.GetById 180ms app.highlight 191ms RepoModel.GetById 201ms app.codeStats 1ms

/Lib/genericpath.py

http://unladen-swallow.googlecode.com/
Python | 105 lines | 68 code | 17 blank | 20 comment | 2 complexity | ed542e3eab9574117d7deef7b00352fd MD5 | raw file
  1"""
  2Path operations common to more than one OS
  3Do not use directly.  The OS specific modules import the appropriate
  4functions from this module themselves.
  5"""
  6import os
  7import stat
  8
  9__all__ = ['commonprefix', 'exists', 'getatime', 'getctime', 'getmtime',
 10           'getsize', 'isdir', 'isfile']
 11
 12
 13# Does a path exist?
 14# This is false for dangling symbolic links on systems that support them.
 15def exists(path):
 16    """Test whether a path exists.  Returns False for broken symbolic links"""
 17    try:
 18        st = os.stat(path)
 19    except os.error:
 20        return False
 21    return True
 22
 23
 24# This follows symbolic links, so both islink() and isdir() can be true
 25# for the same path ono systems that support symlinks
 26def isfile(path):
 27    """Test whether a path is a regular file"""
 28    try:
 29        st = os.stat(path)
 30    except os.error:
 31        return False
 32    return stat.S_ISREG(st.st_mode)
 33
 34
 35# Is a path a directory?
 36# This follows symbolic links, so both islink() and isdir()
 37# can be true for the same path on systems that support symlinks
 38def isdir(s):
 39    """Return true if the pathname refers to an existing directory."""
 40    try:
 41        st = os.stat(s)
 42    except os.error:
 43        return False
 44    return stat.S_ISDIR(st.st_mode)
 45
 46
 47def getsize(filename):
 48    """Return the size of a file, reported by os.stat()."""
 49    return os.stat(filename).st_size
 50
 51
 52def getmtime(filename):
 53    """Return the last modification time of a file, reported by os.stat()."""
 54    return os.stat(filename).st_mtime
 55
 56
 57def getatime(filename):
 58    """Return the last access time of a file, reported by os.stat()."""
 59    return os.stat(filename).st_atime
 60
 61
 62def getctime(filename):
 63    """Return the metadata change time of a file, reported by os.stat()."""
 64    return os.stat(filename).st_ctime
 65
 66
 67# Return the longest prefix of all list elements.
 68def commonprefix(m):
 69    "Given a list of pathnames, returns the longest common leading component"
 70    if not m: return ''
 71    s1 = min(m)
 72    s2 = max(m)
 73    for i, c in enumerate(s1):
 74        if c != s2[i]:
 75            return s1[:i]
 76    return s1
 77
 78# Split a path in root and extension.
 79# The extension is everything starting at the last dot in the last
 80# pathname component; the root is everything before that.
 81# It is always true that root + ext == p.
 82
 83# Generic implementation of splitext, to be parametrized with
 84# the separators
 85def _splitext(p, sep, altsep, extsep):
 86    """Split the extension from a pathname.
 87
 88    Extension is everything from the last dot to the end, ignoring
 89    leading dots.  Returns "(root, ext)"; ext may be empty."""
 90
 91    sepIndex = p.rfind(sep)
 92    if altsep:
 93        altsepIndex = p.rfind(altsep)
 94        sepIndex = max(sepIndex, altsepIndex)
 95
 96    dotIndex = p.rfind(extsep)
 97    if dotIndex > sepIndex:
 98        # skip all leading dots
 99        filenameIndex = sepIndex + 1
100        while filenameIndex < dotIndex:
101            if p[filenameIndex] != extsep:
102                return p[:dotIndex], p[dotIndex:]
103            filenameIndex += 1
104
105    return p, ''