系统: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'模块来避免。我有什么监督吗?还有另一种,也许是更好的方法吗?
非常欢迎所有关于此的评论!
答案 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)