2017-02-22 7 views
1

Windows上でファイルのos.path.dirname()を取得すると、/文字(Windowsでは\に変換されます)が使用されますが、他のものとのパスがos.path.join()の場合、期待通りに\が使用されます。なぜos.pathは ''と '/'の両方を使用しますか?

import os 

cwd = os.path.dirname(__file__) 
print(cwd)       # C:/Users/me/Documents/dir1 
parent_dir = os.path.join(cwd, '..') 
print(parent_dir)      # C:/Users/me/Documents/dir1\.. 

Windowsはこれをうまく処理します。 MSDNごとのように:Windows APIの変換で

ファイルI/O機能「/」「\」と「\\ \?」を使用している場合を除き、NT-スタイル名に名前を変換するの一環として、接頭辞は次のセクションで詳しく説明します。

しかし、なぜ両方のスラッシュが最初に使用されるのですか?

EDITS:

私はCygwinのシェルからpython myfile.pyを使用してコマンドを実行します。

私はC:\Users\me\AppData\Local\Continuum\Anaconda3\python.exeにインストールされたAnaconda3ディストリビューションを使用しています。

λ which python 
/cygdrive/c/Users/me/AppData/Local/Continuum/Anaconda3/python 
+2

は、Windows(最初の出力)にスラッシュを再現することはできません。どのようにあなたのpythonファイルを実行するのですか? –

+0

@ Jean-FrançoisFabre私はアナコンダを使用しています。編集を参照してください。 – Aaron

+1

偶然cygwinから実行していますか? –

答えて

3

あなたはcygwinのから実行しているので、パスが(MSYSは、同じことを)ネイティブではないですが、Cygwinは正常に動作できるようにするために変更されました。

このように、副作用として、現在のファイルを要求すると、それはスラッシュで返されます。

しかし、anacondaは依然としてネイティブのWindowsディストリビューションであり、文字列を結合するときに\(ネイティブos.sep)を取得することが説明されています。ネイティブのセパレータ(ここでは\)で__file__パスを取得するには

は、単に実行します。

os.path.normpath(__file__) 
関連する問題