summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorBarry Warsaw <barry@python.org>1997-02-18 21:53:25 (GMT)
committerBarry Warsaw <barry@python.org>1997-02-18 21:53:25 (GMT)
commit384d249006b786b7d1eed21795a83a5ab703cb96 (patch)
tree06c3626a8e9239e23f6edc7771821e9b550bb4e1 /Lib
parent736bb0659fba85392e5b2034ed492a9e8bfad8d9 (diff)
downloadcpython-384d249006b786b7d1eed21795a83a5ab703cb96.zip
cpython-384d249006b786b7d1eed21795a83a5ab703cb96.tar.gz
cpython-384d249006b786b7d1eed21795a83a5ab703cb96.tar.bz2
join(): join one or more path components
Diffstat (limited to 'Lib')
-rw-r--r--Lib/macpath.py30
-rw-r--r--Lib/ntpath.py19
-rw-r--r--Lib/posixpath.py19
3 files changed, 42 insertions, 26 deletions
diff --git a/Lib/macpath.py b/Lib/macpath.py
index c45ecbf..a6cf66b 100644
--- a/Lib/macpath.py
+++ b/Lib/macpath.py
@@ -20,18 +20,24 @@ def isabs(s):
return ':' in s and s[0] <> ':'
-# Join two pathnames.
-# The result is equivalent to what the second pathname would refer to
-# if the first pathname were the current directory.
-
-def join(s, t):
- if (not s) or isabs(t): return t
- if t[:1] == ':': t = t[1:]
- if ':' not in s:
- s = ':' + s
- if s[-1:] <> ':':
- s = s + ':'
- return s + t
+# Join pathnames.
+# Ignore the previous parts if a part is absolute.
+# Insert a '/' unless the first part is empty or already ends in '/'.
+
+def join(s, *p):
+ path = s
+ for t in p:
+ if (not s) or isabs(t):
+ path = t
+ continue
+ if t[:1] == ':':
+ t = t[1:]
+ if ':' not in path:
+ path = ':' + path
+ if path[-1:] <> ':':
+ path = path + ':'
+ path = path + t
+ return path
# Split a pathname in two parts: the directory leading up to the final bit,
diff --git a/Lib/ntpath.py b/Lib/ntpath.py
index 6a77ec8..d395154 100644
--- a/Lib/ntpath.py
+++ b/Lib/ntpath.py
@@ -34,15 +34,20 @@ def isabs(s):
return s != '' and s[:1] in '/\\'
-# Join two pathnames.
-# Ignore the first part if the second part is absolute.
+# Join pathnames.
+# Ignore the previous parts if a part is absolute.
# Insert a '/' unless the first part is empty or already ends in '/'.
-def join(a, b):
- if isabs(b): return b
- if a == '' or a[-1:] in '/\\': return a + b
- # Note: join('x', '') returns 'x/'; is this what we want?
- return a + os.sep + b
+def join(a, *p):
+ path = a
+ for b in p:
+ if isabs(b):
+ path = b
+ elif path == '' or path[-1:] in '/\\':
+ path = path + b
+ else:
+ path = path + os.sep + b
+ return path
# Split a path in a drive specification (a drive letter followed by a
diff --git a/Lib/posixpath.py b/Lib/posixpath.py
index 014dfe2..965184b 100644
--- a/Lib/posixpath.py
+++ b/Lib/posixpath.py
@@ -26,15 +26,20 @@ def isabs(s):
return s[:1] == '/'
-# Join two pathnames.
-# Ignore the first part if the second part is absolute.
+# Join pathnames.
+# Ignore the previous parts if a part is absolute.
# Insert a '/' unless the first part is empty or already ends in '/'.
-def join(a, b):
- if b[:1] == '/': return b
- if a == '' or a[-1:] == '/': return a + b
- # Note: join('x', '') returns 'x/'; is this what we want?
- return a + '/' + b
+def join(a, *p):
+ path = a
+ for b in p:
+ if b[:1] == '/':
+ path = b
+ elif path == '' or path[-1:] == '/':
+ path = path + b
+ else:
+ path = path + '/' + b
+ return path
# Split a path in head (everything up to the last '/') and tail (the