0

Pythonで解析したいアプリケーションからxmlデータを取得しています:

#!/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 を生成したアプリケーションを修正することですが、それは範囲外です。そのため、データをそのまま処理する必要があります。どうすればこれを回避できますか? 「違法」な文字を捨てるだけで生きていける。

4

2 に答える 2

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)
于 2013-10-29T09:44:34.993 に答える