下面的代码演示了将file://URL转换为OS路径时的问题。在import os
import pathlib
import sys
import urllib.parse
print ("sys.argv[0] = {0}".format(sys.argv[0]))
varFilename = sys.argv[0]
varFilename = os.path.abspath(varFilename)
print ("abs varFilename = {0}".format(varFilename))
varMainFolder = os.path.dirname(varFilename)
print ("varMainFolder = {0}".format(varMainFolder))
varTarget = os.path.join(varMainFolder,"test test.py")
print ("varTarget = {0}".format(varTarget))
varURL = pathlib.Path(varTarget).as_uri()
print ("varURL = {0}".format(varURL))
varPathRaw = urllib.parse.urlparse(varURL).path
print ("varPathRaw = {0}".format(varPathRaw))
varPathDecode = urllib.parse.unquote(varPathRaw)
print ("varPathDecode = {0}".format(varPathDecode))
varOSPath = os.path.normpath(varPathDecode)
print ("varOSPath = {0}".format(varOSPath))
在Linux中,以下代码打印:
^{pr2}$
注意varOSPath是一个完全有效的绝对路径。但在Windows中,代码打印:sys.argv[0] = test.py
abs varFilename = C:\mli\Junk\test.py
varMainFolder = C:\mli\Junk
varTarget = C:\mli\Junk\test test.py
varURL = file:///C:/mli/Junk/test%20test.py
varPathRaw = /C:/mli/Junk/test%20test.py
varPathDecode = /C:/mli/Junk/test test.py
varOSPath = \C:\mli\Junk\test test.py
请注意,varOSPath的绝对路径前面有一个无效的反斜杠。尝试打开具有此路径的文件将失败。我早就料到了操作系统路径.normpath()放弃驱动器规格左侧的斜杠,但它没有
我应该怎么做同样的逻辑在两个平台上给我一个有效的绝对路径?在