Home | History | Annotate | Download | only in python2.7
      1 """
      2 Path operations common to more than one OS
      3 Do not use directly.  The OS specific modules import the appropriate
      4 functions from this module themselves.
      5 """
      6 import os
      7 import 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.
     15 def exists(path):
     16     """Test whether a path exists.  Returns False for broken symbolic links"""
     17     try:
     18         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
     26 def 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
     38 def 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 
     47 def getsize(filename):
     48     """Return the size of a file, reported by os.stat()."""
     49     return os.stat(filename).st_size
     50 
     51 
     52 def getmtime(filename):
     53     """Return the last modification time of a file, reported by os.stat()."""
     54     return os.stat(filename).st_mtime
     55 
     56 
     57 def getatime(filename):
     58     """Return the last access time of a file, reported by os.stat()."""
     59     return os.stat(filename).st_atime
     60 
     61 
     62 def 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.
     68 def 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
     85 def _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, ''
    106