在python中使用“格式不正确”的字符解析xml

时间:2013-10-29 08:14:51

标签: python xml regex

我从应用程序获取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;字符。

2 个答案:

答案 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