2017-02-22 8 views
1

Когда я получаю os.path.dirname() файла в Windows, он использует символ/(преобразуется в \ на Windows), но тогда, когда I 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:

функций файлового ввода/вывода в API обращенного Windows «/» до «\» как часть преобразования имени в имя NT-стиле, за исключением случаев использования «\\? \» префикс, как описано в следующих разделах.

Но почему использование обоих косых чернил происходит в первую очередь?

правок:

я запускаю команду, используя 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

не может воспроизводить слэш на окнах (первый выход). Как запустить файл python? –

+0

@ Jean-FrançoisFabre Я использую Anaconda, см. Мое редактирование. – Aaron

+1

вы запускаете его из cygwin случайно? –

ответ

3

Поскольку вы работаете с Cygwin, пути не являются родными, но изменены для Cygwin, чтобы иметь возможность работать должным образом (MSYS делает то же самое).

Так как побочный эффект, когда python запрашивает текущий файл, он возвращается с косой чертой.

BAT anaconda по-прежнему является родным дистрибутивом Windows, что объясняет, что вы получаете \ (родной os.sep) при соединении строк.

Чтобы получить __file__ путь с носителями сепараторами (\ здесь), просто сделать:

os.path.normpath(__file__) 
Смежные вопросы