mirror of
https://github.com/clinton-hall/nzbToMedia.git
synced 2024-11-14 17:40:24 -08:00
70 lines
1.5 KiB
Python
70 lines
1.5 KiB
Python
import os
|
|
|
|
|
|
def findpath(target, start=os.path.curdir):
|
|
r"""
|
|
Find a path from start to target where target is relative to start.
|
|
|
|
>>> orig_wd = os.getcwd()
|
|
>>> os.chdir('c:\\windows') # so we know what the working directory is
|
|
|
|
>>> findpath('d:\\')
|
|
'd:\\'
|
|
|
|
>>> findpath('d:\\', 'c:\\windows')
|
|
'd:\\'
|
|
|
|
>>> findpath('\\bar', 'd:\\')
|
|
'd:\\bar'
|
|
|
|
>>> findpath('\\bar', 'd:\\foo') # fails with '\\bar'
|
|
'd:\\bar'
|
|
|
|
>>> findpath('bar', 'd:\\foo')
|
|
'd:\\foo\\bar'
|
|
|
|
>>> findpath('bar\\baz', 'd:\\foo')
|
|
'd:\\foo\\bar\\baz'
|
|
|
|
>>> findpath('\\baz', 'd:\\foo\\bar') # fails with '\\baz'
|
|
'd:\\baz'
|
|
|
|
Since we're on the C drive, findpath may be allowed to return
|
|
relative paths for targets on the same drive. I use abspath to
|
|
confirm that the ultimate target is what we expect.
|
|
>>> os.path.abspath(findpath('\\bar'))
|
|
'c:\\bar'
|
|
|
|
>>> os.path.abspath(findpath('bar'))
|
|
'c:\\windows\\bar'
|
|
|
|
>>> findpath('..', 'd:\\foo\\bar')
|
|
'd:\\foo'
|
|
|
|
>>> findpath('..\\bar', 'd:\\foo')
|
|
'd:\\bar'
|
|
|
|
The parent of the root directory is the root directory.
|
|
>>> findpath('..', 'd:\\')
|
|
'd:\\'
|
|
|
|
restore the original working directory
|
|
>>> os.chdir(orig_wd)
|
|
"""
|
|
return os.path.normpath(os.path.join(start, target))
|
|
|
|
|
|
def main():
|
|
import sys
|
|
|
|
if sys.argv[1:]:
|
|
print(findpath(*sys.argv[1:]))
|
|
else:
|
|
import doctest
|
|
|
|
doctest.testmod()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|