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的回答似乎很好,而且没有错误。
答案 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:")
将删除每个T
,y
, p
等,从字符串的开头和结尾开始。
相反,您可以将^
锚与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)