将UNC路径转换为本地路径(以及Python中的路径处理)

1 投票
1 回答
6108 浏览
提问于 2025-04-17 15:09

系统:在64位的Windows 7上使用Python 2.6

最近我在Python中做了很多路径格式化的工作。因为字符串修改总是有点危险,所以我开始用正确的方法,使用'os.path'模块来处理。

第一个问题是,这样处理传入的路径是否正确?或者我能否以某种方式优化这个过程?

sCleanPath = sRawPath.replace('\n', '')
sCleanPath = sCleanPath.replace('\\', '/')
sCleanPythonPath = os.path.normpath(sCleanPath)

现在我在格式化'sCleanPythonPath'时,只使用'os.path'模块中的函数。这效果很好,到目前为止我没有遇到任何问题。

只有一个例外。我需要更改路径,使其不再指向网络存储,而是指向本地驱动器。我开始结合使用'os.path.splitunc()'和'os.path.join()'。

aUncSplit = os.path.splitunc(sCleanPythonUncPath)
sLocalDrive = os.path.normpath('X:/mount')
sCleanPythonLocalPath = (os.path.join(sLocalDrive, aUncSplit[1]))

不幸的是,由于'os.path.join()'处理绝对路径的方式,这个方法并不奏效。我在网上找到的所有解决方案又是使用字符串替换,而我想避免这种做法,想用'os.path'模块。难道我漏掉了什么吗?有没有其他,也许更好的方法来做到这一点?

对此的所有评论都非常欢迎!

1 个回答

0

你可以稍微优化一下第一部分,去掉 replace() 这个调用,因为在Windows系统上,normpath() 会把正斜杠转换成反斜杠:

sCleanPath = sRawPath.replace('\n', '')
sCleanPythonPath = os.path.normpath(sCleanPath)

这里有个方法,可以让你问题的第二部分在不进行字符串替换的情况下也能正常工作:

sSharedFolder = os.path.relpath(os.path.splitunc(sCleanPythonUncPath)[1], os.sep)
sLocalDrive = os.path.normpath('X:/mount')  # why not hardcode the result?
sCleanPythonLocalPath = os.path.join(sLocalDrive, sSharedFolder)

撰写回答