##// END OF EJS Templates
pathutil: add dirname and join functions...
Durham Goode -
r25281:660b178f default
parent child Browse files
Show More
@@ -187,3 +187,68 b' def normasprefix(path):'
187 187 return path + os.sep
188 188 else:
189 189 return path
190
191 def join(path, *paths):
192 '''Join two or more pathname components, inserting '/' as needed.
193
194 Based on the posix os.path.join() implementation.
195
196 >>> join('foo', 'bar')
197 'foo/bar'
198 >>> join('/foo', 'bar')
199 '/foo/bar'
200 >>> join('foo', '/bar')
201 '/bar'
202 >>> join('foo', 'bar/')
203 'foo/bar/'
204 >>> join('foo', 'bar', 'gah')
205 'foo/bar/gah'
206 >>> join('foo')
207 'foo'
208 >>> join('', 'foo')
209 'foo'
210 >>> join('foo/', 'bar')
211 'foo/bar'
212 >>> join('', '', '')
213 ''
214 >>> join ('foo', '', '', 'bar')
215 'foo/bar'
216 '''
217 sep = '/'
218 if not paths:
219 path[:0] + sep #23780: Ensure compatible data type even if p is null.
220 for piece in paths:
221 if piece.startswith(sep):
222 path = piece
223 elif not path or path.endswith(sep):
224 path += piece
225 else:
226 path += sep + piece
227 return path
228
229 def dirname(path):
230 '''returns the directory portion of the given path
231
232 Based on the posix os.path.split() implementation.
233
234 >>> dirname('foo')
235 ''
236 >>> dirname('foo/')
237 'foo'
238 >>> dirname('foo/bar')
239 'foo'
240 >>> dirname('/foo')
241 '/'
242 >>> dirname('/foo/bar')
243 '/foo'
244 >>> dirname('/foo//bar/poo')
245 '/foo//bar'
246 >>> dirname('/foo//bar')
247 '/foo'
248 '''
249 sep = '/'
250 i = path.rfind(sep) + 1
251 dirname = path[:i]
252 if dirname and dirname != sep * len(dirname):
253 dirname = dirname.rstrip(sep)
254 return dirname
General Comments 0
You need to be logged in to leave comments. Login now