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

描述此python windows os.chdir行为的文档?,python,chdir,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

我今天了解到,在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())
印刷品

cwd is f:\directory
cwd is d:\directory
cwd is f:\directory
cwd is f:\
我可以理解为什么这种差异是有用的,但找不到任何记录这种行为的东西。我已经习惯了在我的目录上留下尾随斜杠,就像我通常在这里使用的字符串一样


这种行为是否有记录在案?我可以相信它不会改变吗?

文档中提到了同一模块中另一个函数的这种行为。可以安全地假设,它们将以相同的方式处理:

请注意,由于每个驱动器都有一个当前目录,
os.path.join(“c:,“foo”)
表示相对于驱动器
c:
c:foo
)上当前目录的路径,而不是
c:\foo


然而,这是正确的。该行为是由Windows解释路径的方式引起的。

这不是Python功能,而是Windows的常规功能

在Windows上,每个驱动器都跟踪自己的当前工作目录。实际上,“当前工作目录”是当前驱动器的当前工作目录

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

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

它也不是特定于
chdir
。任何处理路径名的函数,即使是
open
,都将以这种方式运行

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

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


一些跨平台工具试图假装驱动器是顶级装载点,因此
cd F:
类似于
cd/F/
,并且确实转到
F
的根目录。这样做的优点是使程序的本机Windows和Cygwin版本的工作方式非常相似,但缺点是使程序的工作方式不同于传统的DOS风格的程序。一般来说,更多的工具以Python的方式进行操作,这给了您更大的灵活性,并且通常不那么容易混淆


正如您在评论中添加的:

除了“我可以相信它不会改变”之外,我的意思是谁能知道微软将在他们新发布的“改进”控制台中突破什么


嗯,这种行为可以追溯到……我认为PC-DOS2.0,或者当他们第一次添加目录时。如果他们想要改进这个,他们可能会通过去掉驱动和路径来实现,或者更灵活,或者更像POSIX。(虽然UNC路径和
\\.\.\…
“原始”路径已经可以说更灵活,更像POSIX,而且在NT中添加这些路径时,它们并没有摆脱驱动器和目录系统…

这不是Python功能,而是Windows功能。在Windows上,每个驱动器都有自己的工作目录,因此
F:
表示F驱动器的当前工作目录,而`F:\`表示F驱动器的根目录。此外,它不是特定于
chdir
。如果您
open('F:spam.txt')
,您将在F的当前工作目录上获得
spam.txt
,但
open('F:\\spam.txt')
您将在F的根目录上获得
spam.txt
。这是Windows的一项功能。Python的文档是跨平台的,因此没有讨论它可能运行的操作系统的大部分细节。@abarnert:这两条注释给出了一个很好的答案,尤其是第一条。(除了“我能相信它不会改变吗”,我的意思是谁能知道微软将在他们新发布的“改进”控制台中打破什么。)真棒-文档链接很棒。@aggieNick02很棒。很高兴我能帮忙。cd f:评论很到位。我没有想到在命令提示符下尝试cd f:以确保它不会更改cwd。我很高兴os.chdir的行为与cd不同,因为它的参数不适用于当前驱动器,因为这会让人非常沮丧。。。