格式化文件路径

6 人关注

我是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 个评论
从python中脱壳出来在命令提示符下运行东西,这有点不正常(虽然不一定是错的)。 "执行一些行动 "到底是什么? 也许它们可以直接在Python中完成。
JAB
我认为rhololkeolke并没有退出Python shell;你仍然可以在shell里面拖动文件到控制台窗口来获得路径,我最近注意到了。当然,即使你真的要在 shell 外做一些事情,如果只是一个动作,你可以直接使用 os.system() 。即使是多个动作,如果是经常重复的事情,你也可以写一个批处理文件,用 os.system() 调用它。当然,这些都与rhololkeolke所问的没有关系。
python
file-io
rhololkeolke
rhololkeolke
发布于 2011-07-11
2 个回答
JAB
JAB
发布于 2011-07-11
已采纳
0 人赞同

最后一个反斜杠没有被自动转义,因为 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')
    
John Gaines Jr.
John Gaines Jr.
发布于 2011-07-11
0 人赞同

你正在使用正确的模块和方法。 就在你把那个windows路径放进去的时候,让这个字符串成为一个原始字符串,所以你的命令应该看起来像。