2013-11-21 54 views
3

中的字节\ xbd我正在使用LXML从网页上刮取一些文本。一些文字包含分数。Python - 'ascii'编解码器无法解码位置

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

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

有没有本地功能将分数字符转换为浮点数。你所有的编码/解码都会让一个角色转换成另一个角色。您需要更全面的功能来识别每个分数并将其转换为数值。使用unicode键映射到等效浮点值的某种字典查找。 – SpliFF

+0

这就是我想要做的替换()函数,但我不能让它工作。我该怎么做? – appleLover

+0

@SpliFF:是的,有原生的功能来做到这一点。 – abarnert

回答

7

unicodedata.numeric

返回分配给Unicode字符unichr为float的数值。如果没有定义这样的值,则返回缺省值,否则会引发ValueError。

请注意,它只处理单个字符而不是字符串。因此,您仍然需要编写将由整数和分数字符组成的“混合分数”转换为浮点数的代码。但这很容易。例如。你只需要想出如何在数据中表示混合分数的规则。例如,如果纯整数,纯净的分数,其次是一小部分,在它们之间没有空间整数是唯一的可能性,这个工作(包括提高某种合理例外的所有无效的情况下):

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]) 
+1

+1教我关于以前未知的图书馆!谢谢! – VooDooNOFX

+0

非常感谢。非常有用的答案,真的很烦人的问题。上投 –

相关问题