如何解决为什么在 Windows 上,python3,os.path.abspath 不会以相同的方式处理前导斜杠,如果它只是一个目录或者更多?
在 Windows 上,python3:
>>> print(os.path.abspath("//foo/foo.txt"))
\\foo\foo.txt
>>> print(os.path.abspath("//foo"))
\foo
在python2上:
>>> print(os.path.abspath("//foo/foo.txt"))
\\foo\foo.txt
>>> print(os.path.abspath("//foo"))
\\foo
为什么会这样?
考虑到我必须将路径放在一起比较,你会如何处理这个问题,有些就像第一个例子,有些像第二个例子?
我必须找到的唯一可怕的方法是:
In [34]: re.match(r"^(//|\\\\)(?!.+(/|\\))","//foo")
Out[34]: <re.Match object; span=(0,2),match='//'>
In [35]: re.match(r"^(//|\\\\)(?!.+(/|\\))","\\\\foo")
Out[35]: <re.Match object; span=(0,match='\\\\'>
In [36]: re.match(r"^(//|\\\\)(?!.+(/|\\))","//foo/bar")
In [37]: re.match(r"^(//|\\\\)(?!.+(/|\\))","\\\\foo\\bar")
所以我最终不得不做类似的事情:
file_path = "//foo"
match = False
if re.match(r"^(//|\\\\)(?!.+(/|\\))",file_path):
match = True
file_path = os.path.abspath(file_path)
if match:
file_path = file_path.replace("\\","\\\\")
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。