個人做網(wǎng)站賺錢太原做網(wǎng)站的
報錯內(nèi)容:
ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters
報錯背景
用pands批量寫入excel文件,發(fā)生編碼報錯。檢索了很多方案,都不能解決。
導(dǎo)致報錯的原因是存在違法字符,不符合 XML 的解析規(guī)則。pandas寫入應(yīng)該是調(diào)用了xml的解析方法,所以這里也要符合xml的字符規(guī)則。
很多方法都是針對自己任務(wù)中遇到的特定違法字符進行的替換操作,不具備一般性。所以這里列出了一個最終解法——逐個字符的判斷是否符合xml編譯規(guī)則,只保留符合規(guī)則的編碼。
最終代碼
def valid_xml_char_ordinal(c):codepoint = ord(c)# conditions ordered by presumed frequencyreturn (0x20 <= codepoint <= 0xD7FF orcodepoint in (0x9, 0xA, 0xD) or0xE000 <= codepoint <= 0xFFFD or0x10000 <= codepoint <= 0x10FFFF)def wash_data(text):cleaned_string = ''.join(c for c in text if valid_xml_char_ordinal(c))return cleaned_stringtext = "xxx"
text = wash_data(text) # 完成清洗
參考
[1]?在python中過濾掉某些字節(jié)_python_Mangs-Python