格式化文件路径

6 投票
2 回答
26894 浏览
提问于 2025-04-16 21:16

我刚开始学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')

撰写回答