为什么os.path同时使用' \'和' /'?

时间:2017-02-22 20:10:33

标签: python windows python-3.x anaconda

当我在Windows上获取文件的os.path.dirname()时,它使用/字符(由Windows转换为\),但是当我os.path.join()该路径与其他东西一起时,它使用\ character(如预期的那样)。

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处理这个很好。根据{{​​3}}:

  

Windows API转换中的文件I / O功能" /"到" \"作为将名称转换为NT样式名称的一部分,除非使用" \\?\"前缀详见以下部分。

但为什么首先使用两个斜线?

编辑:

我使用来自Cygwin shell的python myfile.py运行命令。

我正在使用C:\Users\me\AppData\Local\Continuum\Anaconda3\python.exe发布的MSDN发布内容。

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

1 个答案:

答案 0 :(得分:3)

由于你是从cygwin运行的,所以这些路径不是原生路径,但是为了能够正常工作而改变了cygwin(MSYS也是如此)。

作为副作用,当python请求当前文件时,它会以斜杠返回。

但是anaconda仍然是一个原生的Windows发行版,它解释了你在加入字符串时得到\(本地os.sep)。

要获取带有原生分隔符的__file__路径(此处为\),只需执行以下操作:

os.path.normpath(__file__)