当我在Windows上获得文件的os.path.dirname()时,它使用/字符(被转换为\ os.path.join() ),但是当我与其他东西一起使用该路径时,它使用\字符(如预期的那样)。
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样式名称的一部分,但使用“\?”前缀的情况除外,详见以下章节。
但是为什么这两个斜线的使用会首先发生呢?
编辑:
我使用Cygwin使用python myfile.py运行这个命令。
我使用的是Anaconda3发行版,它安装在C:\Users\me\AppData\Local\Continuum\Anaconda3\python.exe上。
λ which python
/cygdrive/c/Users/me/AppData/Local/Continuum/Anaconda3/python发布于 2017-02-22 20:24:20
因为您是从cygwin运行的,所以路径不是本机的,而是为了使cygwin能够正常工作而更改的(MSYS也是这样做的)。
因此,作为一个副作用,当python请求当前文件时,它会用斜杠返回。
但是anaconda仍然是一个本机windows发行版,这解释了当您加入字符串时会得到\ (本机os.sep)。
要获得带有本机分隔符的__file__路径(此处为\),只需执行以下操作:
os.path.normpath(__file__)https://stackoverflow.com/questions/42401308
复制相似问题