0

システム: Windows 7 64 ビット上の Python 2.6

最近、Python で多くのパスの書式設定を行いました。文字列の変更は常に危険なので、「os.path」モジュールを使用して適切な方法で変更を開始しました。

最初の質問は、これが着信パスを処理する正しい方法であるかどうかです。または、どうにかしてこれを最適化できますか?

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

「sCleanPythonPath」をフォーマットするために、「os.path」モジュールの関数のみを使用するようになりました。これは非常にうまく機能し、これまでのところ問題はありませんでした。

唯一の例外があります。パスを変更して、ネットワーク ストレージではなくローカル ドライブを指すようにする必要があります。「os.path.join()」と組み合わせて「os.path.splitunc()」の使用を開始しました。

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

残念ながら、「os.path.join()」を使用して絶対パスを処理する方法の性質上、これは機能しません。私がウェブで見つけたすべてのソリューションは、「os.path」モジュールを使用して回避したい文字列置換を再び使用しています。私は何かを監督しましたか?これを行うための別の、おそらくより良い方法はありますか?

これに関するすべてのコメントは大歓迎です!

4

1 に答える 1

0

Windows ではスラッシュがバックスラッシュに変換replace()されるため、呼び出しを削除することで最初の部分をわずかに最適化できます。normpath()

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

文字列の置換を行わずに質問の2番目の部分を機能させるものは次のとおりです。

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)
于 2013-02-07T21:52:09.977 に答える