summaryrefslogtreecommitdiffstats
path: root/Lib/ntpath.py
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1999-02-03 17:20:50 (GMT)
committerGuido van Rossum <guido@python.org>1999-02-03 17:20:50 (GMT)
commit534972bce25792e04a6564e86fd8a8d4addd8f6e (patch)
tree385bc43b9897e480b5ea386cf4b4f5da5e58deeb /Lib/ntpath.py
parent0c9608cf1bcad32d3e7226b2743f245be231a119 (diff)
downloadcpython-534972bce25792e04a6564e86fd8a8d4addd8f6e.zip
cpython-534972bce25792e04a6564e86fd8a8d4addd8f6e.tar.gz
cpython-534972bce25792e04a6564e86fd8a8d4addd8f6e.tar.bz2
New splitdrive() that knows about UNC paths (e.g., network paths like
\\host\mountpoint\dir\file). By Larry Hastings. Also cleaned up some docstrings.
Diffstat (limited to 'Lib/ntpath.py')
-rw-r--r--Lib/ntpath.py76
1 files changed, 50 insertions, 26 deletions
diff --git a/Lib/ntpath.py b/Lib/ntpath.py
index 5782cbe..9597c63 100644
--- a/Lib/ntpath.py
+++ b/Lib/ntpath.py
@@ -1,7 +1,8 @@
# Module 'ntpath' -- common operations on WinNT/Win95 pathnames
"""Common pathname manipulations, WindowsNT/95 version.
-Instead of importing this module
-directly, import os and refer to this module as os.path.
+
+Instead of importing this module directly, import os and refer to this
+module as os.path.
"""
import os
@@ -16,17 +17,15 @@ import string
def normcase(s):
"""Normalize case of pathname.
- Makes all characters lowercase and all slashes into backslashes.
-
- """
+ Makes all characters lowercase and all slashes into backslashes."""
return string.lower(string.replace(s, "/", "\\"))
# Return wheter a path is absolute.
# Trivial in Posix, harder on the Mac or MS-DOS.
# For DOS it is absolute if it starts with a slash or backslash (current
-# volume), or if a pathname after the volume letter and colon starts with
-# a slash or backslash.
+# volume), or if a pathname after the volume letter and colon / UNC resource
+# starts with a slash or backslash.
def isabs(s):
"""Test whether a path is absolute"""
@@ -50,13 +49,30 @@ def join(a, *p):
# Split a path in a drive specification (a drive letter followed by a
-# colon) and the path specification.
+# colon, or a UNC resource) and the path specification.
# It is always true that drivespec + pathspec == p
def splitdrive(p):
- """Split a pathname into drive and path specifiers. Returns a 2-tuple
-"(drive,path)"; either part may be empty"""
+ """Split a pathname into drive and path specifiers.
+
+ Return a 2-tuple (drive, path); either part may be empty.
+ This recognizes UNC paths (e.g. '\\\\host\\mountpoint\\dir\\file')"""
if p[1:2] == ':':
return p[0:2], p[2:]
+ firstTwo = p[0:2]
+ if firstTwo == '//' or firstTwo == '\\\\':
+ # is a UNC path:
+ # vvvvvvvvvvvvvvvvvvvv equivalent to drive letter
+ # \\machine\mountpoint\directories...
+ # directory ^^^^^^^^^^^^^^^
+ normp = normcase(p)
+ index = string.find(normp, '\\', 2)
+ if index == -1:
+ ##raise RuntimeError, 'illegal UNC path: "' + p + '"'
+ return ("", p)
+ index = string.find(normp, '\\', index + 1)
+ if index == -1:
+ index = len(p)
+ return p[:index], p[index:]
return '', p
@@ -67,8 +83,10 @@ def splitdrive(p):
# The resulting head won't end in '/' unless it is the root.
def split(p):
- """Split a pathname. Returns tuple "(head, tail)" where "tail" is
-everything after the final slash. Either part may be empty"""
+ """Split a pathname.
+
+ Return tuple (head, tail) where tail is everything after the final slash.
+ Either part may be empty."""
d, p = splitdrive(p)
slashes = ''
while p and p[-1:] in '/\\':
@@ -96,8 +114,10 @@ everything after the final slash. Either part may be empty"""
# It is always true that root + ext == p.
def splitext(p):
- """Split the extension from a pathname. Extension is everything from the
-last dot to the end. Returns "(root, ext)", either part may be empty"""
+ """Split the extension from a pathname.
+
+ Extension is everything from the last dot to the end.
+ Return (root, ext), either part may be empty."""
root, ext = '', ''
for c in p:
if c in ['/','\\']:
@@ -146,17 +166,17 @@ def commonprefix(m):
# Get size, mtime, atime of files.
def getsize(filename):
- """Return the size of a file, reported by os.stat()."""
+ """Return the size of a file, reported by os.stat()"""
st = os.stat(filename)
return st[stat.ST_SIZE]
def getmtime(filename):
- """Return the last modification time of a file, reported by os.stat()."""
+ """Return the last modification time of a file, reported by os.stat()"""
st = os.stat(filename)
return st[stat.ST_MTIME]
def getatime(filename):
- """Return the last access time of a file, reported by os.stat()."""
+ """Return the last access time of a file, reported by os.stat()"""
st = os.stat(filename)
return st[stat.ST_MTIME]
@@ -208,7 +228,7 @@ def isfile(path):
# Is a path a mount point?
-# XXX This degenerates in: 'is this the root?' on DOS
+# XXX This degenerates in: 'is this the root?' on DOS/Windows
def ismount(path):
"""Test whether a path is a mount point (defined as root of drive)"""
@@ -225,10 +245,11 @@ def ismount(path):
# or to impose a different order of visiting.
def walk(top, func, arg):
- """walk(top,func,args) calls func(arg, d, files) for each directory "d"
-in the tree rooted at "top" (including "top" itself). "files" is a list
-of all the files and subdirs in directory "d".
-"""
+ """Directory tree walk whth callback function.
+
+ walk(top, func, args) calls func(arg, d, files) for each directory d
+ in the tree rooted at top (including top itself); files is a list
+ of all the files and subdirs in directory d."""
try:
names = os.listdir(top)
except os.error:
@@ -252,8 +273,9 @@ of all the files and subdirs in directory "d".
# variable expansion.)
def expanduser(path):
- """Expand ~ and ~user constructions. If user or $HOME is unknown,
-do nothing"""
+ """Expand ~ and ~user constructs.
+
+ If user or $HOME is unknown, do nothing."""
if path[:1] <> '~':
return path
i, n = 1, len(path)
@@ -287,8 +309,9 @@ do nothing"""
varchars = string.letters + string.digits + '_-'
def expandvars(path):
- """Expand shell variables of form $var and ${var}. Unknown variables
-are left unchanged"""
+ """Expand shell variables of form $var and ${var}.
+
+ Unknown variables are left unchanged."""
if '$' not in path:
return path
res = ''
@@ -369,6 +392,7 @@ def normpath(path):
# Return an absolute path.
def abspath(path):
+ """Return the absolute version of a path"""
try:
import win32api
return win32api.GetFullPathName(path)