我是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 :(得分: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不会将字符串中的反斜杠视为转义序列。