python:用一个\替换一个路径中的双\\

时间:2013-04-12 00:54:53

标签: python

使用字符串:

"D:\\Whatever\\Folder\\Etc 1"

我最终想变成

"D:\Whatever\Folder\Etc 1"

我正在使用以下Python:

ln=line[:-1].replace('\n','').replace('\r','').replace("\\\\","\\").rstrip(' ')

但它没有做到这一点 - 是否有更好的做法来削减斜线?

3 个答案:

答案 0 :(得分:3)

我认为你打印的是原始字符串,请参阅:

>>> "D:\\Whatever\\Folder\\Etc 1"
'D:\\Whatever\\Folder\\Etc 1'
>>> 
>>> print "D:\\Whatever\\Folder\\Etc 1"
D:\Whatever\Folder\Etc 1

同时检查此'\\'是否为单个字符(第一个是转义字符):

>>> "D:\\Whatever\\Folder\\Etc 1"[2]
'\\'

这是你想要的吗?

正如你评论的那样:

>>> len("D:\\Whatever\\Folder\\Etc 1")
24
>>> "D:\\Whatever\\Folder\\Etc 1"[23]
'1'
>>> 

length计算单个char,正如我所说'\\'是一个char。字符串的长度为24,23的最后一个字符为1

更清楚:

>>> len('\\')
1

另见这个例子:

>>> 'a\nb'
'a\nb'              # single \
>>> print 'a\nb'
a                   # no \ but, b printed on new line
b

答案 1 :(得分:1)

规范方法是在文件名中使用斜杠(/)字符而不是反斜杠(\)。这可以避免混淆,并使您的程序可移植。 Python中所有与文件相关的函数都使用斜杠,Windows也接受它们。

具体问题是逃避。反斜杠在常规Python字符串中被视为特殊字符。它用于表示难以表达的字符。例如,"\n"是换行符"\t"是制表符。因此,为了表示反斜杠,你必须写"\\",这是一个反斜杠字符。

如果你真的需要处理反斜杠,请使用原始字符串。这是编写字符串文字的另一种方法,其中反斜杠没有特殊含义。它们是这样创建的:

s = r"foo\bar"

一开始就注意r。变量s是一个包含7个字符的字符串。

但是有一点点复杂:r"foo\"是语法错误!原始字符串不能以反斜杠结尾。

答案 2 :(得分:1)

扩展Eike所说的内容:使用/而不是\来简化A)简化写入和B)确保在非Windows系统上运行代码仍然有效。

另外,请查看os.path中的函数,例如:

>>> print os.path.abspath('d:/foo/bar/baz')
d:\foo\bar\baz
>>> print os.path.abspath('c:\\program files\\')
c:\program files