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

时间:2013-02-07 19:25:08

标签: python path unc

系统:Windows 7 64位上的Python 2.6

最近我在Python中做了很多路径格式化。由于字符串修改总是危险的,因此我开始使用'os.path'模块以正确的方式进行修改。

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

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

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

只有一个例外。我必须更改路径,以便它们不再指向网络存储,而是指向本地驱动器。开始将'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 :(得分: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)
相关问题