当我在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
答案 0 :(得分:3)
由于你是从cygwin运行的,所以这些路径不是原生路径,但是为了能够正常工作而改变了cygwin(MSYS也是如此)。
作为副作用,当python请求当前文件时,它会以斜杠返回。
但是anaconda仍然是一个原生的Windows发行版,它解释了你在加入字符串时得到\
(本地os.sep
)。
要获取带有原生分隔符的__file__
路径(此处为\
),只需执行以下操作:
os.path.normpath(__file__)