我从应用程序获取xml数据,我想在python中解析:
#!/usr/bin/python
import xml.etree.ElementTree as ET
import re
xml_file = 'tickets_prod.xml'
xml_file_handle = open(xml_file,'r')
xml_as_string = xml_file_handle.read()
xml_file_handle.close()
xml_cleaned = re.sub(u'[^\x01-\x7f]+',u'',xml_as_string)
root = ET.fromstring(xml_cleaned)
它适用于包含示例数据的较小数据集,但是当我转到真实数据时,我得到了
xml.parsers.expat.ExpatError: not well-formed (invalid token): line 364658, column 72
查看xml文件,我看到这一行364658:
WARNING - (1 warnings in check_logfiles.protocol-2013-05-28-12-53-46) - ^[[0:36mnotice: Scope(Class[Hwsw]): Not required on ^[[0m</description>
我猜是^[
使得python扼流圈 - 它在vim中也突出显示为蓝色。现在我希望我可以使用正则表达式替换来清理数据,但这不起作用。
最好的办法是修复生成xml的应用程序,但这超出了范围。所以我需要处理数据。我该如何解决这个问题?我可以忍住扔掉&#34;非法&#34;字符。
答案 0 :(得分:3)
你已经这样做了:
xml_cleaned = re.sub(u'[^\x01-\x7f]+',u'',xml_as_string)
但是角色^[
可能是Python的\x1b
。如果xml.parser.expat对它进行扼流,你只需要接受一些低于0x20(空格)的字符就可以清理更多内容。例如:
xml_cleaned = re.sub(u'[^\n\r\t\x20-\x7f]+',u'',xml_as_string)
答案 1 :(得分:0)
我知道这已经很老了,但是在下面的URL上徘徊了,该URL列出了所有主要字符及其编码。
https://medium.com/interview-buddy/handling-ascii-character-in-python-58993859c38e