我正在使用LXML从网页上抓取一些文字。一些文本包括分数。
5½
我需要将它变成浮点格式。这些失败了:
ugly_fraction.encode('utf-8') #doesn't change to usable format
ugly_fraction.replace('\xbd', '') #throws error
ugly_freaction.encode('utf-8').replace('\xbd', '') #throws error
答案 0 :(得分:8)
返回分配给Unicode字符unichr的数值为float。如果没有定义这样的值,则返回default,否则,如果没有给出,则引发ValueError。
请注意,它只处理单个字符,而不是字符串。因此,您仍然需要编写将由整数和分数字符组成的“混合分数”的代码编写到float中。但这很容易。例如。您只需要提出有关如何在数据中表示混合分数的规则。例如,如果纯int,纯分数和整数后跟一个没有空格的分数是唯一的可能性,这是有效的(包括为所有无效情况提出某种合理的例外):
def parse_mixed_fraction(s):
if s.isdigit():
return float(s)
elif len(s) == 1:
return unicodedata.numeric(s[-1])
else:
return float(s[:-1]) + unicodedata.numeric(s[-1])