使用字符串:
"D:\\Whatever\\Folder\\Etc 1"
我最终想变成
"D:\Whatever\Folder\Etc 1"
我正在使用以下Python:
ln=line[:-1].replace('\n','').replace('\r','').replace("\\\\","\\").rstrip(' ')
但它没有做到这一点 - 是否有更好的做法来削减斜线?
答案 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