代码之家  ›  专栏  ›  技术社区  ›  aggieNick02

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

  •  2
  • aggieNick02  · 技术社区  · 6 年前

    今天我在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:\
    

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

    这种行为有记录在案吗我能依靠它不改变吗?

    2 回复  |  直到 6 年前
        1
  •  4
  •   Anonymous user3428448    6 年前

    文档中提到了同一模块中另一个函数的这种行为。可以肯定的是,它们的处理方式是相同的:

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

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

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

        2
  •  6
  •   abarnert    6 年前

    这不是python特性,而是一个通用的windows特性。

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

    • chdir('F:') 将驱动器更改为 F ,但不会更改F的工作目录,因此最终将更改为 F型 开车。

    • chdir('F:\\') 将驱动器更改为 F型 ,和更改 F型 的工作目录到其根目录,因此最终更改为 F型 开车。

    它也不是特定于 chdir 是的。任何处理路径名的函数,甚至 open ,会这样做。

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

    * open('F:\\spam.txt') 打开文件 垃圾邮件.txt 在f驱动器的根目录中。


    一些跨平台工具试图假装驱动器是顶级装载点,因此 cd F: 就像 cd /f/ ,和 追根溯源 F型 . 这样做的好处是使程序的本机Windows和Cygwin版本工作得非常类似,但缺点是使程序不能像传统DOS风格的程序那样工作一般来说,更多的工具以Python做的方式做事情,它给你更多的灵活性,而且通常不那么混乱。


    如您在评论中所添加的:

    除了“我能依赖它不改变吗”,我的意思是谁能知道微软将在他们新发布的“改进”控制台中突破什么。

    这个行为可以追溯到PC-DOS 2.0,或者他们第一次添加目录的时候如果他们要改善这一点,他们可能会通过摆脱一些更灵活、更像POSIX的驱动和路径来做到这一点。(尽管UNC路径和 \\.\… “原始”路径已经可以说是更灵活,更像POSIX,而且当他们添加NT的时候,他们并没有摆脱驱动器和DIR系统。