2017-11-18 6 views
3

ネットワークアドレスの使用に問題があります。 WindowsでPython3.6を試してみました。呼び出すPythonのos.path.relpathの予期しない動作

os.path.relpath(r"\\ZEYCUS\first\second\file.txt", start=r"\\ZEYCUS\first") 

私は予想通りに'second\\file.txt'を取得します。ただし、

os.path.relpath(r"\\ZEYCUS\first\second\file.txt", start=r"\\ZEYCUS") 

エラーメッセージ:ValueError: path is on mount '\\\\ZEYCUS\\first', start on mount 'C:'が表示されます。

何が起こっているのですか? C:ビットはどこから来たのですか? relpathを使用して'first\\second\\file.txt'を取得するにはどうすればよいですか?

+0

このリンクをチェックしてください。https://stackoverflow.com/a/17506586/1836483 –

答えて

2

これは、r'\\ZEYCUS'が実際にはOSパスではないためです。これはネットワークホスト指定子です。 WindowsではDOSから継承されたドライブ文字が使用されますが、その間には相対パスはありません。相対パスはドライブ内でのみ機能します。 r"\\ZEYCUS\first"はネットワークボリュームで、ドライブのように動作します。実際には全体の部分が暗黙のドライブレターに変わります。 C:はおそらくあなたのシステムドライブ、おそらくはPythonプロセスの現在のドライブです。 Cmdでちょうどdir \\zeycusを試してみると、エクスプローラの同じ指定子がボリュームリストを生成しても、無効なボリューム構文(むしろ参考にならないメッセージ)になります。

+0

@Vernierありがとう、私は試してみましたが、実際にあなたが言うように動作します、私はネットワーク知識の私の不足がここに表示されます。 – zeycus