2013-11-21 55 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

非常感謝。非常有用的答案,真的很煩人的問題。上投 –

相關問題