2011-07-11 73 views
5

我是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])时,我会收到错误信息。

我的问题是为什么最后一个反斜杠不会像其他的一样自动转义?我如何手动转义最后一个反斜杠?有没有更好的方式来获取文件的目录并更改它?

+0

这是有点不寻常的(虽然并不总是错误的)从python shell以在命令提示符下运行的东西。 “执行某些操作”到底是什么?也许他们可以直接在Python中完成。 – Gerrat

+0

我不认为rhololkeolke正在退出Python shell;正如我最近注意到的那样,您仍然可以将文件拖到控制台窗口中,以便在shell内部获取路径。当然,即使你不得不在shell之外做一些事情,如果它只是一个动作,你也可以使用'os.system()'。即使它是多个操作,如果它经常重复,也可以编写批处理文件并使用'os.system()'调用它。当然,这与rhololkeolke提出的问题无关。 – JAB

回答

5

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

谢谢。现在完美工作。 – rhololkeolke

+0

不客气。 – JAB

2

您正在使用正确的模块和方法。只是当你把那个窗口路径在那里,使字符串原始的字符串,所以你的命令应该是:

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

注意r在第一次报价的前面,这使得Python中不能治疗反斜杠在字符串中作为转义序列。