格式化文件路径
我刚开始学Python,所以可能有些做法不太对,但我在获取和更改文件目录时遇到了问题。我的脚本需要处理多个文件名,这些文件可以在任何目录下。我的脚本里需要Python切换到文件所在的目录,然后执行一些操作。不过,我在切换目录时遇到了麻烦。
这是我到目前为止尝试过的:
path=os.path.split(<file path>)
os.chdir(path[0])
<Do things to file specified by path[1]>
我获取文件路径的方式是从资源管理器拖动到命令行。这会把路径名输入成类似 "C:\foo\bar\file_name.txt"
的格式。当我在解释器中运行第一行时,我得到的结果是 ('C:\\foo\bar','file_name.txt')
。问题是,出于某种原因,最后一个反斜杠没有像其他的那样自动转义,所以当我运行 os.chdir(path[0])
这一行时就出现了错误。
我的问题是,为什么最后一个反斜杠没有像其他的那样自动转义?我该如何手动转义最后一个反斜杠?有没有更好的方法来获取文件的目录并切换到那里?
2 个回答
3
你使用的模块和方法是对的。只是在你输入那个Windows路径的时候,要把字符串变成原始字符串,这样你的命令看起来应该是:
path=os.path.split(r'C:\foo\bar\file_name.txt')
注意第一个引号前面的 r
,这个是告诉Python不要把字符串中的反斜杠当成特殊符号来处理。
7
最后的反斜杠没有被自动转义,因为在普通字符串中,Python 只会在反斜杠后面跟的字符不形成转义序列时才会转义反斜杠。实际上,在你的例子中,从 'C:\foo\bar'
得到的并不是 'C:\\foo\bar'
,而是 'C:\x0coo\x08ar'
。
你可以选择把反斜杠换成正斜杠,或者为了方便拖放操作,可以在路径前面加上 r
,这样就变成了原始字符串,不会识别转义序列。
>>> os.path.split(r"C:\foo\bar\file_name.txt")
('C:\\foo\\bar','file_name.txt')