2017-02-22 57 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:

我運行使用python myfile.py從Cygwin的外殼命令。

我正在使用Anaconda3發行版,它的安裝位置爲C:\Users\me\AppData\Local\Continuum\Anaconda3\python.exe

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

無法重現Windows上的斜槓(第一輸出)。你如何運行你的python文件? –

+0

@ Jean-FrançoisFabre我正在使用Anaconda,請參閱我的編輯。 – Aaron

+1

你是從cygwin偶然運行它嗎? –

回答

3

既然你從Cygwin的運行路徑是不是本地人,但是對於改變cygwin下能夠正常工作(MSYS不相同)。

所以作爲一個副作用,當python要求當前文件時,它將以斜槓返回。

但是anaconda仍然是一個本地windows分佈,這說明您在加入字符串時得到\(原生os.sep)。

要獲得與天然分隔符(\這裏)__file__路徑,只是做:

os.path.normpath(__file__) 
相關問題