.strip('{}:'。format(key))有时会删除最后一个字符

时间:2018-08-15 09:17:03

标签: python scrapy

value = div.xpath('normalize-space(.)').extract()[0].strip('{}:'.format(key)).strip()

上面的代码有时会去除单词中的最后一个字符。在extract()之后删除代码后,所有数据恢复正常,但在列表中。

示例:

    来自Unknown
  • Duration: Unknown变成unknow
  • 来自Movie
  • Type: Movie变成Movi

为什么会这样?

我在Python shell中尝试过此方法,它也去除了最后一个字符

>>> value = ['Type: Movie']
>>> value[0].strip('{}:'.format('Type')).strip()
'Movi'

我希望它返回Movie而不是e被剥夺。

似乎.strip('{}:'.format('Type'))是负责任的。我删除了最后一个strip(),它仅返回带空格的数据。

编辑:看来strip()接受输入字符串中的字符并删除它们,而不是删除确切的字符串。这就是为什么数据损坏的原因。我认为先将字符串拆分然后切成薄片。

编辑2: 对于我的用例来说,奥斯汀(Austin)和Pankaj Singhal的回答似乎很好,而且没有错误。

4 个答案:

答案 0 :(得分:0)

split上使用'Type: '并获得第二项:

value = ['Type: Movie']
print(value[0].split('Type: ')[1])
# Movie

谈论代码,strip并不意味着您要尝试做。 strip仅删除结尾处的字符。

答案 1 :(得分:0)

OR:

>>> value = ['Type: Movie']
>>> value[0][value[0].find(':')+2:]
'Movie'
>>> 

当然,这是与第一个类似的另一种选择,只是使用lstrip

>>> value[0][value[0].find(':')+1:].lstrip()
'Movie'
>>> 

OR:

>>> value[0].lstrip(value[0][:value[0].find(':')+2])
'Movie'

注意:此处的find可以替换为index

答案 2 :(得分:0)

str.strip不会删除该确切的字符串,但是该字符串中的每个字符 (即strip("Type:")将删除每个Typ等,从字符串的开头和结尾开始。

相反,您可以将^锚与regular expression配合使用,以仅匹配字符串开头的子字符串。

>>> value = ['Type: Movie with Type: in its name']
>>> key = "Type"
>>> re.sub(r"^{}: ".format(key), "", value[0])
'Movie with Type: in its name'

答案 3 :(得分:0)

您可以使用lstrip(返回只删除了前导字符的字符串的副本),而不是strip(返回删除前导和尾随字符的字符串的副本):< / p>

>>> 'Type: Movie'.lstrip("Type:").strip()
'Movie'
>>> 'Type: Something with Type'.lstrip("Type:").strip()
'Something with Type'
>>> 'Type: Something with Type:'.lstrip("Type:").strip()
'Something with Type:'
>>>