Current Path: > > opt > alt > python33 > lib64 > > python3.3
Operation : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64 Software : Apache Server IP : 162.0.232.56 | Your IP: 216.73.216.111 Domains : 1034 Domain(s) Permission : [ 0755 ]
Name | Type | Size | Last Modified | Actions |
---|---|---|---|---|
__pycache__ | Directory | - | - | |
collections | Directory | - | - | |
concurrent | Directory | - | - | |
config-3.3m | Directory | - | - | |
ctypes | Directory | - | - | |
curses | Directory | - | - | |
dbm | Directory | - | - | |
distutils | Directory | - | - | |
Directory | - | - | ||
encodings | Directory | - | - | |
html | Directory | - | - | |
http | Directory | - | - | |
idlelib | Directory | - | - | |
importlib | Directory | - | - | |
json | Directory | - | - | |
lib-dynload | Directory | - | - | |
lib2to3 | Directory | - | - | |
logging | Directory | - | - | |
multiprocessing | Directory | - | - | |
plat-linux | Directory | - | - | |
pydoc_data | Directory | - | - | |
site-packages | Directory | - | - | |
sqlite3 | Directory | - | - | |
test | Directory | - | - | |
unittest | Directory | - | - | |
urllib | Directory | - | - | |
venv | Directory | - | - | |
wsgiref | Directory | - | - | |
xml | Directory | - | - | |
xmlrpc | Directory | - | - | |
__future__.py | File | 4584 bytes | April 17 2024 16:58:21. | |
__phello__.foo.py | File | 64 bytes | April 17 2024 16:58:20. | |
_compat_pickle.py | File | 4338 bytes | April 17 2024 16:58:19. | |
_dummy_thread.py | File | 4769 bytes | April 17 2024 16:58:20. | |
_markupbase.py | File | 14598 bytes | April 17 2024 16:58:15. | |
_osx_support.py | File | 18855 bytes | April 17 2024 16:58:20. | |
_pyio.py | File | 72905 bytes | April 17 2024 16:58:17. | |
_strptime.py | File | 21674 bytes | April 17 2024 16:58:20. | |
_sysconfigdata.py | File | 22842 bytes | April 17 2024 16:58:20. | |
_threading_local.py | File | 7410 bytes | April 17 2024 16:58:15. | |
_weakrefset.py | File | 5705 bytes | April 17 2024 16:58:14. | |
abc.py | File | 8057 bytes | April 17 2024 16:58:15. | |
aifc.py | File | 31054 bytes | April 17 2024 16:58:21. | |
antigravity.py | File | 475 bytes | April 17 2024 16:58:16. | |
argparse.py | File | 89069 bytes | April 17 2024 16:58:20. | |
ast.py | File | 12142 bytes | April 17 2024 16:58:20. | |
asynchat.py | File | 11588 bytes | April 17 2024 16:58:19. | |
asyncore.py | File | 20753 bytes | April 17 2024 16:58:21. | |
base64.py | File | 13986 bytes | April 17 2024 16:58:17. | |
bdb.py | File | 21894 bytes | April 17 2024 16:58:19. | |
binhex.py | File | 13708 bytes | April 17 2024 16:58:14. | |
bisect.py | File | 2595 bytes | April 17 2024 16:58:13. | |
bz2.py | File | 18473 bytes | April 17 2024 16:58:20. | |
cProfile.py | File | 6361 bytes | April 17 2024 16:58:14. | |
calendar.py | File | 22940 bytes | April 17 2024 16:58:20. | |
cgi.py | File | 35554 bytes | April 17 2024 16:58:20. | |
cgitb.py | File | 12041 bytes | April 17 2024 16:58:21. | |
chunk.py | File | 5377 bytes | April 17 2024 16:58:17. | |
cmd.py | File | 14860 bytes | April 17 2024 16:58:14. | |
code.py | File | 10030 bytes | April 17 2024 16:58:16. | |
codecs.py | File | 35956 bytes | April 17 2024 16:58:15. | |
codeop.py | File | 5994 bytes | April 17 2024 16:58:14. | |
colorsys.py | File | 3691 bytes | April 17 2024 16:58:15. | |
compileall.py | File | 9743 bytes | April 17 2024 16:58:14. | |
configparser.py | File | 49437 bytes | April 17 2024 16:58:15. | |
contextlib.py | File | 9125 bytes | April 17 2024 16:58:14. | |
copy.py | File | 8991 bytes | April 17 2024 16:58:15. | |
copyreg.py | File | 6611 bytes | April 17 2024 16:58:20. | |
crypt.py | File | 1879 bytes | April 17 2024 16:58:14. | |
csv.py | File | 16185 bytes | April 17 2024 16:58:15. | |
datetime.py | File | 74954 bytes | April 17 2024 16:58:21. | |
decimal.py | File | 228558 bytes | April 17 2024 16:58:19. | |
difflib.py | File | 82519 bytes | April 17 2024 16:58:17. | |
dis.py | File | 10134 bytes | April 17 2024 16:58:15. | |
doctest.py | File | 102933 bytes | April 17 2024 16:58:15. | |
dummy_threading.py | File | 2815 bytes | April 17 2024 16:58:14. | |
filecmp.py | File | 9597 bytes | April 17 2024 16:58:15. | |
fileinput.py | File | 14256 bytes | April 17 2024 16:58:17. | |
fnmatch.py | File | 3163 bytes | April 17 2024 16:58:15. | |
formatter.py | File | 14930 bytes | April 17 2024 16:58:15. | |
fractions.py | File | 23033 bytes | April 17 2024 16:58:14. | |
ftplib.py | File | 40253 bytes | April 17 2024 16:58:15. | |
functools.py | File | 13596 bytes | April 17 2024 16:58:21. | |
genericpath.py | File | 3093 bytes | April 17 2024 16:58:21. | |
getopt.py | File | 7488 bytes | April 17 2024 16:58:20. | |
getpass.py | File | 5793 bytes | April 17 2024 16:58:14. | |
gettext.py | File | 20637 bytes | April 17 2024 16:58:20. | |
glob.py | File | 2838 bytes | April 17 2024 16:58:14. | |
gzip.py | File | 24403 bytes | April 17 2024 16:58:20. | |
hashlib.py | File | 6193 bytes | April 17 2024 16:58:21. | |
heapq.py | File | 17997 bytes | April 17 2024 16:58:13. | |
hmac.py | File | 4440 bytes | April 17 2024 16:58:17. | |
imaplib.py | File | 50111 bytes | April 17 2024 16:58:20. | |
imghdr.py | File | 3528 bytes | April 17 2024 16:58:20. | |
imp.py | File | 9727 bytes | April 17 2024 16:58:15. | |
inspect.py | File | 78960 bytes | April 17 2024 16:58:19. | |
io.py | File | 3280 bytes | April 17 2024 16:58:15. | |
ipaddress.py | File | 70303 bytes | April 17 2024 16:58:20. | |
keyword.py | File | 2060 bytes | April 17 2024 16:58:20. | |
linecache.py | File | 3864 bytes | April 17 2024 16:58:16. | |
locale.py | File | 93215 bytes | April 17 2024 16:58:19. | |
lzma.py | File | 17454 bytes | April 17 2024 16:58:20. | |
macpath.py | File | 5617 bytes | April 17 2024 16:58:15. | |
macurl2path.py | File | 2732 bytes | April 17 2024 16:58:15. | |
mailbox.py | File | 79093 bytes | April 17 2024 16:58:19. | |
mailcap.py | File | 7437 bytes | April 17 2024 16:58:14. | |
mimetypes.py | File | 20735 bytes | April 17 2024 16:58:19. | |
modulefinder.py | File | 23198 bytes | April 17 2024 16:58:14. | |
netrc.py | File | 5747 bytes | April 17 2024 16:58:17. | |
nntplib.py | File | 42786 bytes | April 17 2024 16:58:13. | |
ntpath.py | File | 20437 bytes | April 17 2024 16:58:14. | |
nturl2path.py | File | 2396 bytes | April 17 2024 16:58:20. | |
numbers.py | File | 10398 bytes | April 17 2024 16:58:20. | |
opcode.py | File | 5098 bytes | April 17 2024 16:58:21. | |
optparse.py | File | 60346 bytes | April 17 2024 16:58:20. | |
os.py | File | 34779 bytes | April 17 2024 16:58:14. | |
os2emxpath.py | File | 4659 bytes | April 17 2024 16:58:15. | |
pdb.py | File | 60653 bytes | April 17 2024 16:58:16. | |
pickle.py | File | 47858 bytes | April 17 2024 16:58:17. | |
pickletools.py | File | 81349 bytes | April 17 2024 16:58:15. | |
pipes.py | File | 8916 bytes | April 17 2024 16:58:20. | |
pkgutil.py | File | 21539 bytes | April 17 2024 16:58:15. | |
platform.py | File | 50742 bytes | April 17 2024 16:58:15. | |
plistlib.py | File | 14777 bytes | April 17 2024 16:58:13. | |
poplib.py | File | 11372 bytes | April 17 2024 16:58:13. | |
posixpath.py | File | 14254 bytes | April 17 2024 16:58:16. | |
pprint.py | File | 12700 bytes | April 17 2024 16:58:15. | |
profile.py | File | 21448 bytes | April 17 2024 16:58:17. | |
pstats.py | File | 26372 bytes | April 17 2024 16:58:14. | |
pty.py | File | 5055 bytes | April 17 2024 16:58:14. | |
py_compile.py | File | 6717 bytes | April 17 2024 16:58:19. | |
pyclbr.py | File | 13438 bytes | April 17 2024 16:58:13. | |
pydoc.py | File | 101644 bytes | April 17 2024 16:58:15. | |
queue.py | File | 8835 bytes | April 17 2024 16:58:20. | |
quopri.py | File | 7315 bytes | April 17 2024 16:58:20. | |
random.py | File | 25660 bytes | April 17 2024 16:58:14. | |
re.py | File | 14973 bytes | April 17 2024 16:58:17. | |
reprlib.py | File | 5110 bytes | April 17 2024 16:58:15. | |
rlcompleter.py | File | 5526 bytes | April 17 2024 16:58:21. | |
runpy.py | File | 10413 bytes | April 17 2024 16:58:14. | |
sched.py | File | 6399 bytes | April 17 2024 16:58:19. | |
shelve.py | File | 8243 bytes | April 17 2024 16:58:20. | |
shlex.py | File | 11502 bytes | April 17 2024 16:58:21. | |
shutil.py | File | 39147 bytes | April 17 2024 16:58:20. | |
site.py | File | 21971 bytes | April 17 2024 16:58:19. | |
smtpd.py | File | 30207 bytes | April 17 2024 16:58:16. | |
smtplib.py | File | 38021 bytes | April 17 2024 16:58:14. | |
sndhdr.py | File | 6219 bytes | April 17 2024 16:58:20. | |
socket.py | File | 14913 bytes | April 17 2024 16:58:20. | |
socketserver.py | File | 24196 bytes | April 17 2024 16:58:21. | |
sre_compile.py | File | 16345 bytes | April 17 2024 16:58:14. | |
sre_constants.py | File | 7231 bytes | April 17 2024 16:58:14. | |
sre_parse.py | File | 30212 bytes | April 17 2024 16:58:16. | |
ssl.py | File | 24478 bytes | April 17 2024 16:58:19. | |
stat.py | File | 4304 bytes | April 17 2024 16:58:19. | |
string.py | File | 9410 bytes | April 17 2024 16:58:20. | |
stringprep.py | File | 12917 bytes | April 17 2024 16:58:17. | |
struct.py | File | 238 bytes | April 17 2024 16:58:16. | |
subprocess.py | File | 67578 bytes | April 17 2024 16:58:14. | |
sunau.py | File | 17523 bytes | April 17 2024 16:58:15. | |
symbol.py | File | 2051 bytes | April 17 2024 16:58:14. | |
symtable.py | File | 7383 bytes | April 17 2024 16:58:20. | |
sysconfig.py | File | 25174 bytes | April 17 2024 16:58:20. | |
tabnanny.py | File | 11410 bytes | April 17 2024 16:58:20. | |
tarfile.py | File | 88864 bytes | April 17 2024 16:58:15. | |
telnetlib.py | File | 27349 bytes | April 17 2024 16:58:15. | |
tempfile.py | File | 23013 bytes | April 17 2024 16:58:14. | |
textwrap.py | File | 16488 bytes | April 17 2024 16:58:14. | |
this.py | File | 1003 bytes | April 17 2024 16:58:17. | |
threading.py | File | 45641 bytes | April 17 2024 16:58:19. | |
timeit.py | File | 12395 bytes | April 17 2024 16:58:15. | |
token.py | File | 3034 bytes | April 17 2024 16:58:14. | |
tokenize.py | File | 24876 bytes | April 17 2024 16:58:20. | |
trace.py | File | 31487 bytes | April 17 2024 16:58:13. | |
traceback.py | File | 11982 bytes | April 17 2024 16:58:20. | |
tty.py | File | 879 bytes | April 17 2024 16:58:13. | |
types.py | File | 3167 bytes | April 17 2024 16:58:14. | |
uu.py | File | 6766 bytes | April 17 2024 16:58:14. | |
uuid.py | File | 22349 bytes | April 17 2024 16:58:15. | |
warnings.py | File | 13825 bytes | April 17 2024 16:58:15. | |
wave.py | File | 18579 bytes | April 17 2024 16:58:15. | |
weakref.py | File | 11495 bytes | April 17 2024 16:58:19. | |
webbrowser.py | File | 22913 bytes | April 17 2024 16:58:20. | |
xdrlib.py | File | 5381 bytes | April 17 2024 16:58:21. | |
zipfile.py | File | 66424 bytes | April 17 2024 16:58:21. |
# Module 'ntpath' -- common operations on WinNT/Win95 pathnames """Common pathname manipulations, WindowsNT/95 version. Instead of importing this module directly, import os and refer to this module as os.path. """ import os import sys import stat import genericpath from genericpath import * __all__ = ["normcase","isabs","join","splitdrive","split","splitext", "basename","dirname","commonprefix","getsize","getmtime", "getatime","getctime", "islink","exists","lexists","isdir","isfile", "ismount", "expanduser","expandvars","normpath","abspath", "splitunc","curdir","pardir","sep","pathsep","defpath","altsep", "extsep","devnull","realpath","supports_unicode_filenames","relpath", "samefile", "sameopenfile",] # strings representing various path-related bits and pieces # These are primarily for export; internally, they are hardcoded. curdir = '.' pardir = '..' extsep = '.' sep = '\\' pathsep = ';' altsep = '/' defpath = '.;C:\\bin' if 'ce' in sys.builtin_module_names: defpath = '\\Windows' elif 'os2' in sys.builtin_module_names: # OS/2 w/ VACPP altsep = '/' devnull = 'nul' def _get_empty(path): if isinstance(path, bytes): return b'' else: return '' def _get_sep(path): if isinstance(path, bytes): return b'\\' else: return '\\' def _get_altsep(path): if isinstance(path, bytes): return b'/' else: return '/' def _get_bothseps(path): if isinstance(path, bytes): return b'\\/' else: return '\\/' def _get_dot(path): if isinstance(path, bytes): return b'.' else: return '.' def _get_colon(path): if isinstance(path, bytes): return b':' else: return ':' def _get_special(path): if isinstance(path, bytes): return (b'\\\\.\\', b'\\\\?\\') else: return ('\\\\.\\', '\\\\?\\') # Normalize the case of a pathname and map slashes to backslashes. # Other normalizations (such as optimizing '../' away) are not done # (this is done by normpath). def normcase(s): """Normalize case of pathname. Makes all characters lowercase and all slashes into backslashes.""" if not isinstance(s, (bytes, str)): raise TypeError("normcase() argument must be str or bytes, " "not '{}'".format(s.__class__.__name__)) return s.replace(_get_altsep(s), _get_sep(s)).lower() # Return whether a path is absolute. # Trivial in Posix, harder on Windows. # For Windows it is absolute if it starts with a slash or backslash (current # volume), or if a pathname after the volume-letter-and-colon or UNC-resource # starts with a slash or backslash. def isabs(s): """Test whether a path is absolute""" s = splitdrive(s)[1] return len(s) > 0 and s[:1] in _get_bothseps(s) # Join two (or more) paths. def join(path, *paths): sep = _get_sep(path) seps = _get_bothseps(path) colon = _get_colon(path) result_drive, result_path = splitdrive(path) for p in paths: p_drive, p_path = splitdrive(p) if p_path and p_path[0] in seps: # Second path is absolute if p_drive or not result_drive: result_drive = p_drive result_path = p_path continue elif p_drive and p_drive != result_drive: if p_drive.lower() != result_drive.lower(): # Different drives => ignore the first path entirely result_drive = p_drive result_path = p_path continue # Same drive in different case result_drive = p_drive # Second path is relative to the first if result_path and result_path[-1] not in seps: result_path = result_path + sep result_path = result_path + p_path ## add separator between UNC and non-absolute path if (result_path and result_path[0] not in seps and result_drive and result_drive[-1:] != colon): return result_drive + sep + result_path return result_drive + result_path # Split a path in a drive specification (a drive letter followed by a # colon) and the path specification. # It is always true that drivespec + pathspec == p def splitdrive(p): """Split a pathname into drive/UNC sharepoint and relative path specifiers. Returns a 2-tuple (drive_or_unc, path); either part may be empty. If you assign result = splitdrive(p) It is always true that: result[0] + result[1] == p If the path contained a drive letter, drive_or_unc will contain everything up to and including the colon. e.g. splitdrive("c:/dir") returns ("c:", "/dir") If the path contained a UNC path, the drive_or_unc will contain the host name and share up to but not including the fourth directory separator character. e.g. splitdrive("//host/computer/dir") returns ("//host/computer", "/dir") Paths cannot contain both a drive letter and a UNC path. """ empty = _get_empty(p) if len(p) > 1: sep = _get_sep(p) normp = p.replace(_get_altsep(p), sep) if (normp[0:2] == sep*2) and (normp[2:3] != sep): # is a UNC path: # vvvvvvvvvvvvvvvvvvvv drive letter or UNC path # \\machine\mountpoint\directory\etc\... # directory ^^^^^^^^^^^^^^^ index = normp.find(sep, 2) if index == -1: return empty, p index2 = normp.find(sep, index + 1) # a UNC path can't have two slashes in a row # (after the initial two) if index2 == index + 1: return empty, p if index2 == -1: index2 = len(p) return p[:index2], p[index2:] if normp[1:2] == _get_colon(p): return p[:2], p[2:] return empty, p # Parse UNC paths def splitunc(p): """Deprecated since Python 3.1. Please use splitdrive() instead; it now handles UNC paths. Split a pathname into UNC mount point and relative path specifiers. Return a 2-tuple (unc, rest); either part may be empty. If unc is not empty, it has the form '//host/mount' (or similar using backslashes). unc+rest is always the input path. Paths containing drive letters never have an UNC part. """ import warnings warnings.warn("ntpath.splitunc is deprecated, use ntpath.splitdrive instead", DeprecationWarning, 2) drive, path = splitdrive(p) if len(drive) == 2: # Drive letter present return p[:0], p return drive, path # Split a path in head (everything up to the last '/') and tail (the # rest). After the trailing '/' is stripped, the invariant # join(head, tail) == p holds. # The resulting head won't end in '/' unless it is the root. def split(p): """Split a pathname. Return tuple (head, tail) where tail is everything after the final slash. Either part may be empty.""" seps = _get_bothseps(p) d, p = splitdrive(p) # set i to index beyond p's last slash i = len(p) while i and p[i-1] not in seps: i -= 1 head, tail = p[:i], p[i:] # now tail has no slashes # remove trailing slashes from head, unless it's all slashes head2 = head while head2 and head2[-1:] in seps: head2 = head2[:-1] head = head2 or head return d + head, tail # Split a path in root and extension. # The extension is everything starting at the last dot in the last # pathname component; the root is everything before that. # It is always true that root + ext == p. def splitext(p): return genericpath._splitext(p, _get_sep(p), _get_altsep(p), _get_dot(p)) splitext.__doc__ = genericpath._splitext.__doc__ # Return the tail (basename) part of a path. def basename(p): """Returns the final component of a pathname""" return split(p)[1] # Return the head (dirname) part of a path. def dirname(p): """Returns the directory component of a pathname""" return split(p)[0] # Is a path a symbolic link? # This will always return false on systems where os.lstat doesn't exist. def islink(path): """Test whether a path is a symbolic link. This will always return false for Windows prior to 6.0 and for OS/2. """ try: st = os.lstat(path) except (os.error, AttributeError): return False return stat.S_ISLNK(st.st_mode) # Being true for dangling symbolic links is also useful. def lexists(path): """Test whether a path exists. Returns True for broken symbolic links""" try: st = os.lstat(path) except (os.error, WindowsError): return False return True # Is a path a mount point? Either a root (with or without drive letter) # or an UNC path with at most a / or \ after the mount point. def ismount(path): """Test whether a path is a mount point (defined as root of drive)""" seps = _get_bothseps(path) root, rest = splitdrive(path) if root and root[0] in seps: return (not rest) or (rest in seps) return rest in seps # Expand paths beginning with '~' or '~user'. # '~' means $HOME; '~user' means that user's home directory. # If the path doesn't begin with '~', or if the user or $HOME is unknown, # the path is returned unchanged (leaving error reporting to whatever # function is called with the expanded path as argument). # See also module 'glob' for expansion of *, ? and [...] in pathnames. # (A function should also be defined to do full *sh-style environment # variable expansion.) def expanduser(path): """Expand ~ and ~user constructs. If user or $HOME is unknown, do nothing.""" if isinstance(path, bytes): tilde = b'~' else: tilde = '~' if not path.startswith(tilde): return path i, n = 1, len(path) while i < n and path[i] not in _get_bothseps(path): i += 1 if 'HOME' in os.environ: userhome = os.environ['HOME'] elif 'USERPROFILE' in os.environ: userhome = os.environ['USERPROFILE'] elif not 'HOMEPATH' in os.environ: return path else: try: drive = os.environ['HOMEDRIVE'] except KeyError: drive = '' userhome = join(drive, os.environ['HOMEPATH']) if isinstance(path, bytes): userhome = userhome.encode(sys.getfilesystemencoding()) if i != 1: #~user userhome = join(dirname(userhome), path[1:i]) return userhome + path[i:] # Expand paths containing shell variable substitutions. # The following rules apply: # - no expansion within single quotes # - '$$' is translated into '$' # - '%%' is translated into '%' if '%%' are not seen in %var1%%var2% # - ${varname} is accepted. # - $varname is accepted. # - %varname% is accepted. # - varnames can be made out of letters, digits and the characters '_-' # (though is not verified in the ${varname} and %varname% cases) # XXX With COMMAND.COM you can use any characters in a variable name, # XXX except '^|<>='. def expandvars(path): """Expand shell variables of the forms $var, ${var} and %var%. Unknown variables are left unchanged.""" if isinstance(path, bytes): if ord('$') not in path and ord('%') not in path: return path import string varchars = bytes(string.ascii_letters + string.digits + '_-', 'ascii') quote = b'\'' percent = b'%' brace = b'{' dollar = b'$' environ = getattr(os, 'environb', None) else: if '$' not in path and '%' not in path: return path import string varchars = string.ascii_letters + string.digits + '_-' quote = '\'' percent = '%' brace = '{' dollar = '$' environ = os.environ res = path[:0] index = 0 pathlen = len(path) while index < pathlen: c = path[index:index+1] if c == quote: # no expansion within single quotes path = path[index + 1:] pathlen = len(path) try: index = path.index(c) res += c + path[:index + 1] except ValueError: res += path index = pathlen - 1 elif c == percent: # variable or '%' if path[index + 1:index + 2] == percent: res += c index += 1 else: path = path[index+1:] pathlen = len(path) try: index = path.index(percent) except ValueError: res += percent + path index = pathlen - 1 else: var = path[:index] try: if environ is None: value = os.fsencode(os.environ[os.fsdecode(var)]) else: value = environ[var] except KeyError: value = percent + var + percent res += value elif c == dollar: # variable or '$$' if path[index + 1:index + 2] == dollar: res += c index += 1 elif path[index + 1:index + 2] == brace: path = path[index+2:] pathlen = len(path) try: if isinstance(path, bytes): index = path.index(b'}') else: index = path.index('}') except ValueError: if isinstance(path, bytes): res += b'${' + path else: res += '${' + path index = pathlen - 1 else: var = path[:index] try: if environ is None: value = os.fsencode(os.environ[os.fsdecode(var)]) else: value = environ[var] except KeyError: if isinstance(path, bytes): value = b'${' + var + b'}' else: value = '${' + var + '}' res += value else: var = path[:0] index += 1 c = path[index:index + 1] while c and c in varchars: var += c index += 1 c = path[index:index + 1] try: if environ is None: value = os.fsencode(os.environ[os.fsdecode(var)]) else: value = environ[var] except KeyError: value = dollar + var res += value if c: index -= 1 else: res += c index += 1 return res # Normalize a path, e.g. A//B, A/./B and A/foo/../B all become A\B. # Previously, this function also truncated pathnames to 8+3 format, # but as this module is called "ntpath", that's obviously wrong! def normpath(path): """Normalize path, eliminating double slashes, etc.""" sep = _get_sep(path) dotdot = _get_dot(path) * 2 special_prefixes = _get_special(path) if path.startswith(special_prefixes): # in the case of paths with these prefixes: # \\.\ -> device names # \\?\ -> literal paths # do not do any normalization, but return the path unchanged return path path = path.replace(_get_altsep(path), sep) prefix, path = splitdrive(path) # collapse initial backslashes if path.startswith(sep): prefix += sep path = path.lstrip(sep) comps = path.split(sep) i = 0 while i < len(comps): if not comps[i] or comps[i] == _get_dot(path): del comps[i] elif comps[i] == dotdot: if i > 0 and comps[i-1] != dotdot: del comps[i-1:i+1] i -= 1 elif i == 0 and prefix.endswith(_get_sep(path)): del comps[i] else: i += 1 else: i += 1 # If the path is now empty, substitute '.' if not prefix and not comps: comps.append(_get_dot(path)) return prefix + sep.join(comps) # Return an absolute path. try: from nt import _getfullpathname except ImportError: # not running on Windows - mock up something sensible def abspath(path): """Return the absolute version of a path.""" if not isabs(path): if isinstance(path, bytes): cwd = os.getcwdb() else: cwd = os.getcwd() path = join(cwd, path) return normpath(path) else: # use native Windows method on Windows def abspath(path): """Return the absolute version of a path.""" if path: # Empty path must return current working directory. try: path = _getfullpathname(path) except WindowsError: pass # Bad path - return unchanged. elif isinstance(path, bytes): path = os.getcwdb() else: path = os.getcwd() return normpath(path) # realpath is a no-op on systems without islink support realpath = abspath # Win9x family and earlier have no Unicode filename support. supports_unicode_filenames = (hasattr(sys, "getwindowsversion") and sys.getwindowsversion()[3] >= 2) def relpath(path, start=curdir): """Return a relative version of a path""" sep = _get_sep(path) if start is curdir: start = _get_dot(path) if not path: raise ValueError("no path specified") start_abs = abspath(normpath(start)) path_abs = abspath(normpath(path)) start_drive, start_rest = splitdrive(start_abs) path_drive, path_rest = splitdrive(path_abs) if normcase(start_drive) != normcase(path_drive): error = "path is on mount '{0}', start on mount '{1}'".format( path_drive, start_drive) raise ValueError(error) start_list = [x for x in start_rest.split(sep) if x] path_list = [x for x in path_rest.split(sep) if x] # Work out how much of the filepath is shared by start and path. i = 0 for e1, e2 in zip(start_list, path_list): if normcase(e1) != normcase(e2): break i += 1 if isinstance(path, bytes): pardir = b'..' else: pardir = '..' rel_list = [pardir] * (len(start_list)-i) + path_list[i:] if not rel_list: return _get_dot(path) return join(*rel_list) # determine if two files are in fact the same file try: # GetFinalPathNameByHandle is available starting with Windows 6.0. # Windows XP and non-Windows OS'es will mock _getfinalpathname. if sys.getwindowsversion()[:2] >= (6, 0): from nt import _getfinalpathname else: raise ImportError except (AttributeError, ImportError): # On Windows XP and earlier, two files are the same if their absolute # pathnames are the same. # Non-Windows operating systems fake this method with an XP # approximation. def _getfinalpathname(f): return normcase(abspath(f)) def samefile(f1, f2): "Test whether two pathnames reference the same actual file" return _getfinalpathname(f1) == _getfinalpathname(f2) try: from nt import _getfileinformation except ImportError: # On other operating systems, just return the fd and see that # it compares equal in sameopenfile. def _getfileinformation(fd): return fd def sameopenfile(f1, f2): """Test whether two file objects reference the same file""" return _getfileinformation(f1) == _getfileinformation(f2) try: # The genericpath.isdir implementation uses os.stat and checks the mode # attribute to tell whether or not the path is a directory. # This is overkill on Windows - just pass the path to GetFileAttributes # and check the attribute from there. from nt import _isdir as isdir except ImportError: # Use genericpath.isdir as imported above. pass
SILENT KILLER Tool