描述此python windows os.chdir行为的文档?
我今天了解到,在windows上的python中,执行描述此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
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不同,因为它的参数不适用于当前驱动器,因为这会让人非常沮丧。。。