我们从Python开源项目中,提取了以下24个代码示例,用于说明如何使用posixpath.relpath()。
def test_relpath(self): (real_getcwd, os.getcwd) = (os.getcwd, lambda: r"/home/user/bar") try: curdir = os.path.split(os.getcwd())[-1] self.assertRaises(ValueError, posixpath.relpath, "") self.assertEqual(posixpath.relpath("a"), "a") self.assertEqual(posixpath.relpath(posixpath.abspath("a")), "a") self.assertEqual(posixpath.relpath("a/b"), "a/b") self.assertEqual(posixpath.relpath("../a/b"), "../a/b") self.assertEqual(posixpath.relpath("a", "../b"), "../"+curdir+"/a") self.assertEqual(posixpath.relpath("a/b", "../c"), "../"+curdir+"/a/b") self.assertEqual(posixpath.relpath("a", "b/c"), "../../a") self.assertEqual(posixpath.relpath("a", "a"), ".") self.assertEqual(posixpath.relpath("/foo/bar/bat", "/x/y/z"), '../../../foo/bar/bat') self.assertEqual(posixpath.relpath("/foo/bar/bat", "/foo/bar"), 'bat') self.assertEqual(posixpath.relpath("/foo/bar/bat", "/"), 'foo/bar/bat') self.assertEqual(posixpath.relpath("/", "/foo/bar/bat"), '../../..') self.assertEqual(posixpath.relpath("/foo/bar/bat", "/x"), '../foo/bar/bat') self.assertEqual(posixpath.relpath("/x", "/foo/bar/bat"), '../../../x') self.assertEqual(posixpath.relpath("/", "/"), '.') self.assertEqual(posixpath.relpath("/a", "/a"), '.') self.assertEqual(posixpath.relpath("/a/b", "/a/b"), '.') finally: os.getcwd = real_getcwd
def dir(self, prefix=None, status=None): if prefix is None or isinstance(prefix, str): prefixes = [prefix] else: prefixes = prefix assert all([prefix is None or isinstance(prefix, str) for prefix in prefixes]), "All path prefixes must be strings." prefixes = [prefix if prefix is None else posixpath.relpath(prefix) for prefix in prefixes] if isinstance(status, str): if status == 'all': status = [self.PostStatus.DRAFT, self.PostStatus.SUBMITTED, self.PostStatus.PUBLISHED, self.PostStatus.UNPUBLISHED] else: raise ValueError('Status alias `{}` not recognised.'.format(status)) if status is not None and not isinstance(status, list): status = [status] elif status is None: status = [self.PostStatus.PUBLISHED] # Use old syntax for "yielding from" to maintain support for python 2 for prefix in prefixes: for path in self._dir(prefix=prefix, statuses=status): yield path
def main(): chapter_files, other_files = get_filenames() # make previous of first file and next of last file to just bring # back to README prevs = ['README.md'] + chapter_files[:-1] nexts = chapter_files[1:] + ['README.md'] print("Chapter files:") for prevpath, thispath, nextpath in zip(prevs, chapter_files, nexts): # all paths should be like 'section/file.md' where = posixpath.dirname(thispath) prev = posixpath.relpath(prevpath, where) next_ = posixpath.relpath(nextpath, where) extralinks = "[Previous](%s) | [Next](%s) |\n" % (prev, next_) end = END_TEMPLATE.format( toplevel='..', extralinks=extralinks, readmeheader=where) update_end(thispath, end) print() print("Other files:") for filename in other_files: where = posixpath.dirname(filename) end = END_TEMPLATE.format( toplevel=posixpath.relpath('.', where), extralinks="", readmeheader='list-of-contents') update_end(filename, end)
def get_relative_path(self, path): if path.startswith("//"): # project relative return posixpath.relpath(self.get_absolute_path(path), self.get_absolute_build_path()) else: return path # absolute, just return the path
def test_realpath_relative(self): try: os.symlink(posixpath.relpath(ABSTFN+"1"), ABSTFN) self.assertEqual(realpath(ABSTFN), ABSTFN+"1") finally: support.unlink(ABSTFN)
def test_relpath_bytes(self): (real_getcwdb, os.getcwdb) = (os.getcwdb, lambda: br"/home/user/bar") try: curdir = os.path.split(os.getcwdb())[-1] self.assertRaises(ValueError, posixpath.relpath, b"") self.assertEqual(posixpath.relpath(b"a"), b"a") self.assertEqual(posixpath.relpath(posixpath.abspath(b"a")), b"a") self.assertEqual(posixpath.relpath(b"a/b"), b"a/b") self.assertEqual(posixpath.relpath(b"../a/b"), b"../a/b") self.assertEqual(posixpath.relpath(b"a", b"../b"), b"../"+curdir+b"/a") self.assertEqual(posixpath.relpath(b"a/b", b"../c"), b"../"+curdir+b"/a/b") self.assertEqual(posixpath.relpath(b"a", b"b/c"), b"../../a") self.assertEqual(posixpath.relpath(b"a", b"a"), b".") self.assertEqual(posixpath.relpath(b"/foo/bar/bat", b"/x/y/z"), b'../../../foo/bar/bat') self.assertEqual(posixpath.relpath(b"/foo/bar/bat", b"/foo/bar"), b'bat') self.assertEqual(posixpath.relpath(b"/foo/bar/bat", b"/"), b'foo/bar/bat') self.assertEqual(posixpath.relpath(b"/", b"/foo/bar/bat"), b'../../..') self.assertEqual(posixpath.relpath(b"/foo/bar/bat", b"/x"), b'../foo/bar/bat') self.assertEqual(posixpath.relpath(b"/x", b"/foo/bar/bat"), b'../../../x') self.assertEqual(posixpath.relpath(b"/", b"/"), b'.') self.assertEqual(posixpath.relpath(b"/a", b"/a"), b'.') self.assertEqual(posixpath.relpath(b"/a/b", b"/a/b"), b'.') self.assertRaises(TypeError, posixpath.relpath, b"bytes", "str") self.assertRaises(TypeError, posixpath.relpath, "str", b"bytes") finally: os.getcwdb = real_getcwdb
def get_relative_url(destination, source): """Get relative URL between two sources. http://stackoverflow.com/a/7469668/315168 :param destination: :param source: :return: tuple (is same domain, relative url) """ u_dest = urlparse.urlsplit(destination) u_src = urlparse.urlsplit(source) _uc1 = urlparse.urlunsplit(u_dest[:2]+tuple('' for i in range(3))) _uc2 = urlparse.urlunsplit(u_src[:2]+tuple('' for i in range(3))) if _uc1 != _uc2: ## This is a different domain return False, destination # If there is no / component in url assume it's root path src_path = u_src.path or "/" _relpath = posixpath.relpath(u_dest.path, posixpath.dirname(src_path)) return True, _relpath # return True, urlparse.urlunsplit(('', '', _relpath, u_dest.query, u_dest.fragment))
def _kp_path(self, path, rel='/'): if path is None: return None path = os.path.relpath(os.path.abspath(os.path.join(rel, path)), rel) if os.name == 'nt': path = path.replace(os.path.sep, os.path.altsep) assert all([not segment.endswith('.kp') for segment in path.split( '/')[:-1]]), "The post path may not contain a directory named '*.kp'." if path == '.' or path.startswith('..'): raise ValueError("Provided path '{}' is outside of the knowledge repository.".format(path)) if not path.endswith('.kp'): path += '.kp' return path
def __repo_for_path(self, path): path_prefixes = sorted(self.uri.keys(), key=lambda x: len(x), reverse=True) for prefix in path_prefixes: if path.startswith(prefix): relpath = posixpath.relpath(path, prefix or '.') if path else '' return prefix, self.uri[prefix], relpath if relpath != '.' else None raise ValueError(("No KnowledgeRepository found for '{}', " "paths must be prefixed with {}.").format(path, path_prefixes))
def _kp_dir(self, path, parent=None, revision=None): ref_prefix = parent + '/' if parent else '' revision = revision or self._kp_get_revision(path, enforce_exists=True) refs = (self.session.query(self.PostRef.ref) .filter(self.PostRef.path == path) .filter(self.PostRef.ref.like(ref_prefix + '%')) .filter(self.PostRef.revision == revision)).all() for (ref,) in refs: if ref is not None: yield posixpath.relpath(ref, parent or '')
def relative_ref(self, baseURI): """ Return string containing relative reference to package item from *baseURI*. E.g. PackURI('/ppt/slideLayouts/slideLayout1.xml') would return '../slideLayouts/slideLayout1.xml' for baseURI '/ppt/slides'. """ # workaround for posixpath bug in 2.6, doesn't generate correct # relative path when *start* (second) parameter is root ('/') if baseURI == '/': relpath = self[1:] else: relpath = posixpath.relpath(self, baseURI) return relpath