[Python] os.path.join()の注意事項

Python
スポンサーリンク
こんにちは。 雑食会社員🐼くま子です
スポンサーリンク

問題

C:\tmp\abc\というパスが欲しくて下記のコードを書いたのに、
C:\abc\が返ってきてしまった

os.path.join("C:\\tmp", "\\ABC")

原因

os.path --- 一般的なパス名操作
ソースコード: Lib/genericpath.py, Lib/posixpath.py(POSIX) 、 Lib/ntpath.py(Windows) 。 This module implements some useful functions on pathnames. To read or write files...

Windows の場合は、絶対パスの要素 (たとえば r’\foo’) が見つかった場合はドライブレターはリセットされません。要素にドライブレターが含まれていれば、それより前の要素は全て破棄され、ドライブレターがリセットされます。各ドライブに対してカレントディレクトリがあるので、 os.path.join(“c:”, “foo”) によって、 c:\foo ではなく、ドライブ C: 上のカレントディレクトリからの相対パス(c:foo) が返されることに注意してください。

つまり、
"\\ABC"
が原因だった。

解決策

os.path.join("C:\\tmp", "ABC")

連結の\os.path.joinさんがつけてくれるし、
os.path.join利用時には先頭には\\をつけない、と覚えておけば困らなそう

「Windowsの場合は」、ってことは、LinuxやMacでは起こらないのか

コメント