Python - 'ascii'编解码器无法解码byte \ xbd的位置

时间:2013-11-21 01:14:30

标签: python unicode web-scraping lxml

我正在使用LXML从网页上抓取一些文字。一些文本包括分数。

我需要将它变成浮点格式。这些失败了:

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

1 个答案:

答案 0 :(得分:8)

unicodedata.numeric

  

返回分配给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])