Cleaning an XML file in Python before parsing
我正在使用minidom解析一个XML文件,它抛出一个错误,指示数据的格式不正确。我发现有些页面具有像
尝试
1 | xmltext = re.sub(u"[^\x20-\x7f]+",u"",xmltext) |
它将除去除0x20-0x7F范围之外的所有内容。
如果要保留制表符、换行符等控制字符,可以从x01开始。
1 | xmltext = re.sub(u"[^\x01-\x7f]+",u"",xmltext) |
看看μtidylib,一个python包装器到tidylib。
看起来您处理的数据是以某种编码方式保存的,它们"好像"是ASCII码。XML文件通常应该是utf8,SAX(minidom使用的底层解析器)应该处理这个问题,所以在处理链的那个部分看起来好像有问题。我先试着确保编码正确和正确识别,而不是专注于"清理"。可能是一个损坏的XML指令?你能编辑你的Q来显示文件的前几行吗,尤其是最开始的
如果您确实需要具有奇怪字符的数据,那么可以将它们转换为XML解析器能够理解的代码,而不只是剥离它们。
您可以查看unicodedata包,尤其是normalize方法。
我自己也没用过,所以我不能告诉你那么多,但你可以在这里再问一次,如果你决定要转换并保留这些数据。
1 2 3 | >>> import unicodedata >>> unicodedata.normalize("NFKD" , u"à1?à? à1€à??à?¥ &") u'a\u03001\u201ea\u0300 \u0327 a\u03001\u20aca\u0300 \u0327Y\u0308a\u0300 \u0327\xa5 &' |
我将抛出所有可以通过设置第8位(0x80)来识别的非ASCII字符(128..255,分别为0x80..0xFF)。
您可以将文件读入名为
old_str 的python字符串中。然后结合
lambda 语句执行filter 调用:1new_str = filter(lambda x: x in string.ascii_letters, old_str)解析NeXYSTR
有许多方法可以实现从字符串中剥离非ASCII字符。
这个问题可能是相关的:如何检查python中的字符串是否是ASCII格式的?