問題
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では起こらないのか
コメント