我在使用以下代码时遇到问题:
name = "epubtxt\ursita.txt"
我想删除目录,以获取输出ursita.txt
我正在这样做:
name.lstrip('epubtxt\\')
主要问题是我得到了以下输出:
rsita.txt
这是怎么回事?
答案 0 :(得分:3)
s1.lstrip(s2)
不会从s2
的左侧剥离整个s1
。它的作用是从s2
的左侧删除 s1
中包含的所有字符。
示例:
'aaabbbccc'.lstrip('a') == 'bbbccc'
'aaabbbccc'.lstrip('ac') == 'bbbccc'
'aaabbbccc'.lstrip('ab') == 'ccc'
在您的示例中,'epubtxt\\'
包含字符u
,因此反斜杠后的u
被去除。
您可能需要的是:
if name.startswith('epubtxt\\'):
name[len('epubtxt\\'):]
答案 1 :(得分:1)
u
被剥离的原因与\u
或unicode无关。问题在于strip
函数采用要删除的字符列表,而不考虑它们的顺序(在函数调用中的单词中)。换句话说,在您的示例中,该函数将剥离与'e','p','u'等的 any 匹配的所有字符,直到其中一个字符不匹配。< / p>
答案 2 :(得分:1)
其他人已经告诉您lstrip
不起作用的原因。合适的解决方案是拆分并采用最后一个组件:
name.split('\\')[-1]
# "ursita.txt"
答案 3 :(得分:0)
可能更容易做到的是在\
上分割字符串。这样一来,您就不会出现任何错误匹配(因为Windows中的文件名不能包含\)。
这可以通过以下代码完成:
name = "epubtxt\ursita.txt"
name = name.split("\\")
name = name[-1] # use the last element of the list, which will be the absolute file.
>>> name
'ursita.txt'
我在第二行中使用了双斜杠-这是因为\
是转义字符,但是我们不希望它转义任何内容。因此,我们逃脱了。