gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 19:52:43 25 4
gpt4 key购买 nike

我今天了解到,在 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:\

我能理解为什么这种差异是有用的,但找不到任何记录这种行为的东西。我习惯于在我的目录中留下尾部斜线,因为我通常在这里使用字符串...

是否在任何地方记录了这种行为?我能相信它不会改变吗?

最佳答案

这不是 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 的根目录。这样做的好处是使您的程序的 native Windows 和 Cygwin 构建非常相似,但缺点是使您的程序不像传统的 DOS 风格的程序那样工作。一般而言,更多工具以 Python 的方式做事——它为您提供了更大的灵 active ,并且通常不会造成混淆。


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

Apart from the "Can I rely on it not changing", I mean who can tell what Microsoft will break in their newly announced 'improved' console.

好吧,这种行为可以追溯到……我认为是 PC-DOS 2.0,或者当他们第一次添加目录时。如果他们要改进这一点,他们可能会通过摆脱驱动器和路径来实现更灵活或更像 POSIX 的东西。 (虽然 UNC 路径和 \\.\… “原始”路径可以说已经更灵活,更像 POSIX,并且当它们添加了 NT 中的那些……)

关于python - 描述此 python windows os.chdir 行为的文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51432825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com