我想将一个正斜杠格式的unix文件路径转换为一个反斜杠格式的Windows文件路径。我尝试了os.path.join()和os.path.normpath(),但是它们似乎都为结果添加了双向后斜杠。例如,如果我使用os.path.normpath('static/css/reset.css')
,则结果为'static\\css\\reset.css'
而不是static\css\reset.css
。 'static/css/reset.css'.replace('/','\\')
给了我与os.path.normpath
相同的结果。有没有办法只获得单向后斜杠分隔的字符串格式?
顺便说一句,我在64位Windows 7上使用Python2.7。
答案 0 :(得分:9)
'static\\css\\reset.css'
是字符串r'static\css\reset.css'
的表示形式。
double backsalsh表示反斜杠的转义 - 在字符串文字中它具有“对下一个字符执行特殊操作”的含义,这是您不想要的。
>>> print('static\\css\\reset.css')
static\css\reset.css
答案 1 :(得分:3)
我将继续讨论Elzar的正确答案和评论。可能让你感到困惑并且在之前的答案中没有说明的是,Python字符串之间存在差异,正如您在源代码中提供的那样,并且随着python控制台和IDE向您显示,开发人员,以及字符串的打印方式,即显示给用户:
>>> s = 'c:\\directory\\file.txt'
>>> s
'c:\\directory\\file.txt' <-- if you ask for the value, you will see double slashes
>>> print s
c:\directory\file.txt <-- if you print the string, the user will see single slashes
我认为你得到的原因“系统无法找到指定的路径。”是因为你手动复制到剪贴板并粘贴来自Python控制台/ IDE的东西(你的路径在你的问题中用引号显示也支持)。
为了增加混乱,你有时会使用单引号。只有一些斜线字符组合具有特殊含义(请参阅Python documentation),例如'\n'
表示新行,而其他行则没有,例如'\s'
,只打印为\s
。
作为旁注,转义字符的原因是它们是Python /计算机通常与程序员通信文本中有哪些特殊字符的便捷方式。这样,例如,'\t'
(制表符)和' '
(许多空格)之间没有歧义,实际上可以看到不可打印/某些控制字符等。
答案 2 :(得分:1)
static\\css\\reset.css
正在显示,因为“\\”代表“\”。如果您使用此文件路径,它将被解释为'static \ css \ reset.css'。
作为交互式shell中的检查
>>> list('static\\css\\reset.css')
给出:
['s', 't', 'a', 't', 'i', 'c', '\\', 'c', 's', 's', '\\', 'r', 'e', 's', 'e', 't', '.', 'c', 's', 's']
“\\”将显示为单个字符。