source: python/vendor/Python-2.6.5/Lib/genericpath.py

Last change on this file was 2, checked in by Yuri Dario, 15 years ago

Initial import for vendor code.

  • Property svn:eol-style set to native
File size: 2.9 KB
Line 
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, ''
Note: See TracBrowser for help on using the repository browser.