首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >描述这种python windows os.chdir行为的文档?

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

Stack Overflow用户
提问于 2018-07-20 06:59:53
回答 2查看 106关注 0票数 2

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

下面是一个例子:

代码语言:javascript
复制
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())

打印

代码语言:javascript
复制
cwd is f:\directory
cwd is d:\directory
cwd is f:\directory
cwd is f:\

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-20 07:15:38

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

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

https://docs.python.org/3/library/os.path.html

然而,the comment by abarnert是正确的。此行为由Windows解释路径的方式引起。

票数 4
EN

Stack Overflow用户

发布于 2018-07-20 07:18:57

这不是一个Python特性,它是一个通用的Windows特性。

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

  • chdir('F:')将驱动器更改为F,但不更改F的工作目录,因此您最终更改为F drive.
  • 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…中添加这些路径时,它们并没有摆脱驱动器和目录系统)

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51432825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档