作者:ynyx六五 | 来源:互联网 | 2022-12-10 10:22
我今天了解到,在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:\
我可以理解为什么这种差异很有用,但找不到任何记录这种行为的东西.我已经习惯了从我的目录中留下拖尾斜线,因为我通常在这里使用字符串......
这种行为记录在哪里吗?我可以依靠它不改变吗?
1> abarnert..:
这不是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')
打开spam.txt
F驱动器根目录中的文件.
一些跨平台工具试图假装驱动器是顶级挂载点,所以cd F:
就像是cd /f/
,并且确实是根本的F
.这样做的好处是使您的程序的本机Windows和Cygwin构建工作非常相似,但缺点是使您的程序不像传统的DOS样式程序那样工作.通常,更多工具以Python的方式执行 - 它为您提供了更大的灵活性,并且通常不那么容易混淆.
正如您在评论中添加的那样:
除了"我可以依靠它不会改变",我的意思是谁可以告诉微软将在他们新推出的"改进"控制台中打破什么.
好吧,这种行为可以追溯到...我认为PC-DOS 2.0,或者只要他们第一次添加目录.如果他们要改进这一点,他们可能会通过摆脱更灵活或更像POSIX的驱动器和路径来实现.(尽管UNC路径和\\.\…
"原始"路径已经可以说更灵活,更像POSIX,并且当他们在NT中添加它们时,他们没有摆脱驱动器和dir系统......)