javapath.py

来自「mallet是自然语言处理、机器学习领域的一个开源项目。」· Python 代码 · 共 336 行

PY
336
字号
"""Common pathname manipulations, JDK version.Instead of importing this module directly, import os and refer to thismodule as os.path."""# Incompletely implemented:# islink -- How?# ismount -- How?# splitdrive -- How?# normcase -- How?# Missing:# sameopenfile -- Java doesn't have fstat nor file descriptors?# samestat -- How?import javafrom java.io import Filefrom java.lang import Systemimport osdef _tostr(s, method):    if isinstance(s, "".__class__):        return s    import org    raise TypeError, "%s() argument must be a string object, not %s" % (                method, org.python.core.Py.safeRepr(s))        def dirname(path):    """Return the directory component of a pathname"""    path = _tostr(path, "dirname")    result = File(path).getParent()    if not result:	if isabs(path):	    result = path # Must be root	else:	    result = ""    return resultdef basename(path):    """Return the final component of a pathname"""    path = _tostr(path, "basename")    return File(path).getName()def split(path):    """Split a pathname.    Return tuple "(head, tail)" where "tail" is everything after the    final slash.  Either part may be empty.    """    path = _tostr(path, "split")    return (dirname(path), basename(path))def splitext(path):    """Split the extension from a pathname.    Extension is everything from the last dot to the end.  Return    "(root, ext)", either part may be empty.    """    i = 0    n = -1    for c in path:        if c == '.': n = i        i = i+1    if n < 0:        return (path, "")    else:        return (path[:n], path[n:])def splitdrive(path):    """Split a pathname into drive and path.    On JDK, drive is always empty.    XXX This isn't correct for JDK on DOS/Windows!    """    return ("", path)def exists(path):    """Test whether a path exists.    Returns false for broken symbolic links.    """    path = _tostr(path, "exists")    return File(path).exists()def isabs(path):    """Test whether a path is absolute"""    path = _tostr(path, "isabs")    return File(path).isAbsolute()def isfile(path):    """Test whether a path is a regular file"""    path = _tostr(path, "isfile")    return File(path).isFile()def isdir(path):    """Test whether a path is a directory"""    path = _tostr(path, "isdir")    return File(path).isDirectory()def join(path, *args):    """Join two or more pathname components, inserting os.sep as needed"""    path = _tostr(path, "join")    f = File(path)    for a in args:        a = _tostr(a, "join")	g = File(a)	if g.isAbsolute() or len(f.getPath()) == 0:	    f = g	else:	    f = File(f, a)    return f.getPath()def normcase(path):    """Normalize case of pathname.    XXX Not done right under JDK.    """    path = _tostr(path, "normcase")    return File(path).getPath()def commonprefix(m):    "Given a list of pathnames, return the longest common leading component"    if not m: return ''    prefix = m[0]    for item in m:        for i in range(len(prefix)):            if prefix[:i+1] <> item[:i+1]:                prefix = prefix[:i]                if i == 0: return ''                break    return prefixdef islink(path):    """Test whether a path is a symbolic link.    XXX This incorrectly always returns false under JDK.    """    return 0def samefile(path, path2):    """Test whether two pathnames reference the same actual file"""    path = _tostr(path, "samefile")    path2 = _tostr(path2, "samefile")    f = File(path)    f2 = File(path2)    return f.getCanonicalPath() == f2.getCanonicalPath()def ismount(path):    """Test whether a path is a mount point.    XXX This incorrectly always returns false under JDK.    """    return 0def walk(top, func, arg):    """Walk a directory tree.    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:        return    func(arg, top, names)    for name in names:	name = join(top, name)	if isdir(name) and not islink(name):	    walk(name, func, arg)def expanduser(path):    if path[:1] == "~":	c = path[1:2]	if not c:	    return gethome()	if c == os.sep:	    return File(gethome(), path[2:]).getPath()    return pathdef getuser():    return System.getProperty("user.name")def gethome():    return System.getProperty("user.home")# normpath() from Python 1.5.2, with Java appropriate generalizations# Normalize a path, e.g. A//B, A/./B and A/foo/../B all become A/B.# It should be understood that this may change the meaning of the path# if it contains symbolic links!def normpath(path):    """Normalize path, eliminating double slashes, etc."""    sep = os.sep    if sep == '\\':        path = path.replace("/", sep)    curdir = os.curdir    pardir = os.pardir    import string    # Treat initial slashes specially    slashes = ''    while path[:1] == sep:        slashes = slashes + sep        path = path[1:]    comps = string.splitfields(path, sep)    i = 0    while i < len(comps):        if comps[i] == curdir:            del comps[i]            while i < len(comps) and comps[i] == '':                del comps[i]        elif comps[i] == pardir and i > 0 and comps[i-1] not in ('', pardir):            del comps[i-1:i+1]            i = i-1        elif comps[i] == '' and i > 0 and comps[i-1] <> '':            del comps[i]        else:            i = i+1    # If the path is now empty, substitute '.'    if not comps and not slashes:        comps.append(curdir)    return slashes + string.joinfields(comps, sep)# Return an absolute path.def abspath(path):    path = _tostr(path, "abspath")    return File(path).getAbsolutePath()def getsize(path):    path = _tostr(path, "getsize")    f = File(path)    size = f.length()    # Sadly, if the returned length is zero, we don't really know if the file    # is zero sized or does not exist.    if size == 0 and not f.exists():        raise OSError(0, 'No such file or directory', path)    return sizedef getmtime(path):    path = _tostr(path, "getmtime")    f = File(path)    if not f.exists():        raise OSError(0, 'No such file or directory', path)    return f.lastModified() / 1000.0def getatime(path):    # We can't detect access time so we return modification time. This    # matches the behaviour in os.stat().    path = _tostr(path, "getatime")    f = File(path)    if not f.exists():        raise OSError(0, 'No such file or directory', path)    return f.lastModified() / 1000.0# expandvars is stolen from CPython-2.1.1's Lib/ntpath.py:# Expand paths containing shell variable substitutions.# The following rules apply:#       - no expansion within single quotes#       - no escape character, except for '$$' which is translated into '$'#       - ${varname} is accepted.#       - varnames can be made out of letters, digits and the character '_'# XXX With COMMAND.COM you can use any characters in a variable name,# XXX except '^|<>='.def expandvars(path):    """Expand shell variables of form $var and ${var}.    Unknown variables are left unchanged."""    if '$' not in path:        return path    import string    varchars = string.letters + string.digits + '_-'    res = ''    index = 0    pathlen = len(path)    while index < pathlen:        c = path[index]        if c == '\'':   # no expansion within single quotes            path = path[index + 1:]            pathlen = len(path)            try:                index = path.index('\'')                res = res + '\'' + path[:index + 1]            except ValueError:                res = res + path                index = pathlen - 1        elif c == '$':  # variable or '$$'            if path[index + 1:index + 2] == '$':                res = res + c                index = index + 1            elif path[index + 1:index + 2] == '{':                path = path[index+2:]                pathlen = len(path)                try:                    index = path.index('}')                    var = path[:index]                    if os.environ.has_key(var):                        res = res + os.environ[var]                except ValueError:                    res = res + path                    index = pathlen - 1            else:                var = ''                index = index + 1                c = path[index:index + 1]                while c != '' and c in varchars:                    var = var + c                    index = index + 1                    c = path[index:index + 1]                if os.environ.has_key(var):                    res = res + os.environ[var]                if c != '':                    res = res + c        else:            res = res + c        index = index + 1    return res

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?