"""Convert a NT pathname to a file URL and vice versa.This module only exists to provide OS-specific codefor urllib.requests, thus do not use directly."""# Testing is done through test_urllib.def url2pathname(url):"""OS-specific conversion from a relative URL of the 'file' schemeto a file system path; not recommended for general use."""# e.g.# ///C|/foo/bar/spam.foo# and# ///C:/foo/bar/spam.foo# become# C:\foo\bar\spam.fooimport string, urllib.parse# Windows itself uses ":" even in URLs.url = url.replace(':', '|')if not '|' in url:# No drive specifier, just convert slashesif url[:4] == '////':# path is something like ////host/path/on/remote/host# convert this to \\host\path\on\remote\host# (notice halving of slashes at the start of the path)url = url[2:]components = url.split('/')# make sure not to convert quoted slashes :-)return urllib.parse.unquote('\\'.join(components))comp = url.split('|')if len(comp) != 2 or comp[0][-1] not in string.ascii_letters:error = 'Bad URL: ' + urlraise OSError(error)drive = comp[0][-1].upper()components = comp[1].split('/')path = drive + ':'for comp in components:if comp:path = path + '\\' + urllib.parse.unquote(comp)# Issue #11474 - handing url such as |c/|if path.endswith(':') and url.endswith('/'):path += '\\'return pathdef pathname2url(p):"""OS-specific conversion from a file system path to a relative URLof the 'file' scheme; not recommended for general use."""# e.g.# C:\foo\bar\spam.foo# becomes# ///C:/foo/bar/spam.fooimport urllib.parseif not ':' in p:# No drive specifier, just convert slashes and quote the nameif p[:2] == '\\\\':# path is something like \\host\path\on\remote\host# convert this to ////host/path/on/remote/host# (notice doubling of slashes at the start of the path)p = '\\\\' + pcomponents = p.split('\\')return urllib.parse.quote('/'.join(components))comp = p.split(':')if len(comp) != 2 or len(comp[0]) > 1:error = 'Bad path: ' + praise OSError(error)drive = urllib.parse.quote(comp[0].upper())components = comp[1].split('\\')path = '///' + drive + ':'for comp in components:if comp:path = path + '/' + urllib.parse.quote(comp)return path
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。