描述这个python windows os.chdir行为的文档?

agg*_*k02 2 python chdir

我今天了解到,在Windows上的python中,做的与做os.chdir('f:\\')的完全不同os.chdir('f:').带有反斜杠的命令实际上会更改当前目录.如果没有反斜杠,该命令就像f:在命令提示符下键入一样,并将当前目录更改为f驱动器上的最后一个当前目录.

这是一个例子:

import time
import os
if __name__ == '__main__':
    os.chdir('f:\\directory')
    print 'cwd is {}'.format(os.getcwd())
    os.chdir('d:\\directory')
    print 'cwd is {}'.format(os.getcwd())
    os.chdir('f:')
    print 'cwd is {}'.format(os.getcwd())
    os.chdir('f:\\')
    print 'cwd is {}'.format(os.getcwd())
Run Code Online (Sandbox Code Playgroud)

版画

cwd is f:\directory
cwd is d:\directory
cwd is f:\directory
cwd is f:\
Run Code Online (Sandbox Code Playgroud)

我可以理解为什么这种差异很有用,但找不到任何记录这种行为的东西.我已经习惯了从我的目录中留下拖尾斜线,因为我通常在这里使用字符串......

这种行为记录在哪里吗?我可以依靠它不改变吗?

aba*_*ert 6

这不是Python功能,它是一般的Windows功能.

在Windows上,每个驱动器都会跟踪其自己的当前工作目录.实际上,"当前工作目录"是当前驱动器的当前工作目录.

  • chdir('F:')将驱动器更改为F,但不更改F的工作目录,因此最终更改为F驱动器的当前目录.

  • chdir('F:\\')将驱动器更改为F,并将F工作目录更改为其根目录,因此最终更改为F驱动器的根目录.

它也不具体chdir.任何处理路径名的函数open都会以这种方式行事.

*open('F:spam.txt')打开spam.txtF驱动器当前工作目录中的文件(即使您当前的驱动器是,例如,C).(这与DOS风格工具的工作方式一致.)

*open('F:\\spam.txt')打开spam.txtF驱动器根目录中的文件.


一些跨平台工具试图假装驱动器是顶级挂载点,所以cd F:就像是cd /f/,并且确实是根本的F.这样做的好处是使您的程序的本机Windows和Cygwin构建工作非常相似,但缺点是使您的程序不像传统的DOS样式程序那样工作.通常,更多工具以Python的方式执行 - 它为您提供了更大的灵活性,并且通常不那么容易混淆.


正如您在评论中添加的那样:

除了"我可以依靠它不会改变",我的意思是谁可以告诉微软将在他们新推出的"改进"控制台中打破什么.

好吧,这种行为可以追溯到...我认为PC-DOS 2.0,或者只要他们第一次添加目录.如果他们要改进这一点,他们可能会通过摆脱更灵活或更像POSIX的驱动器和路径来实现.(尽管UNC路径和\\.\…"原始"路径已经可以说更灵活,更像POSIX,并且当他们在NT中添加它们时,他们没有摆脱驱动器和dir系统......)