格式化文件路径

时间:2011-07-11 15:24:16

标签: python file-io

我是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 个答案:

答案 0 :(得分:6)

最后一个反斜杠没有被自动转义,因为当后面的字符没有形成带反斜杠的转义序列时,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')

答案 1 :(得分:3)

您正在使用正确的模块和方法。就在你把那个窗口路径放在那里时,把字符串作为一个原始字符串,所以你的命令应该是这样的:

path=os.path.split(r'C:\foo\bar\file_name.txt')

注意第一个引号前面的r,这使Python不会将字符串中的反斜杠视为转义序列。