XML数据中某些特殊字符的“ParseError:格式不正确”错误

2024-10-03 15:25:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码来清理日志文件以从中获取XML(日志文件格式不好,没有根),然后解析并执行其他功能。清理工作正常,但XML解析器对一些包含特殊字符的XML数据抛出了错误。我的代码如下:

with open(log_file, 'r') as fr, open('XMLinLog2.xml', 'w') as fw:
    fw.write("<document>\n")

    for line in fr:
        if line.strip().startswith('<'):
            fw.write('\t' + line)
    fw.write("\n</document>")

# --- Parsing Log files after cleanup ---

doc = ET.parse('XMLinLog2.xml')

日志文件中抛出错误的xml数据为; (1) Ops Désactivée 23:59和(2)[mono@90°>;+1 在日志文件中清理后显示为Ops D�萨蒂夫�e 23:59和[mono@90� >;>;+1分别。 所以我明白了� 性格导致问题。 问题:

  1. 我如何处理这个错误
  2. 如果我需要打印这些数据,如何才能正确打印?我不想打印�. 因为我假设每当我收到法语文本时,它都会抛出错误

此处出现完整错误: 退赛(最近一次呼叫最后一次): 文件“C:/Users/PycharmProjects/IMSS_TestHarness/Libraries/try.py”,第23行,在 doc=ET.parse('XMLinLog2.xml') 文件“C:\Users\AppData\Local\Programs\Python38-32\lib\xml\etree\ElementTree.py”,第1202行,在parse中 parse(源,解析器) 文件“C:\Users\AppData\Local\Programs\Python38-32\lib\xml\etree\ElementTree.py”,第595行,在parse中 self.\u root=parser.\u parse\u整体(源) xml.etree.ElementTree.ParseError:格式不正确(无效令牌):第3299行第22列

进程已完成,退出代码为1

日志文件:

1.  2020-08-03 15:59:54.635 (72 ,Effective Commit) Info          Sending:
<U_DisplayCommand>
  <DestinationId>5035</DestinationId>
  <DisplayId>1</DisplayId>
  <LineTextEnglish>
    <Line>Ops Disabled 23:59 N</Line>
  </LineTextEnglish>
  <LineTextFrench>
    **<Line>Ops Désactivée 23:59</Line>**
  </LineTextFrench>
</U_DisplayCommand>
<U_DisplayCommand>
  <DestinationId>5085</DestinationId>
  <DisplayId>1</DisplayId>
  <LineTextEnglish>
    <Line>Vaudreuil-Dori P123A</Line>
    <Line>[ mono @ 90° &gt;&gt; +1</Line>
  </LineTextEnglish>
  <LineTextFrench>
    <Line>Vaudreuil-Dori P123A</Line>
    <Line>[ mono @ 90° &gt;&gt; +1</Line>
  </LineTextFrench>
</U_DisplayCommand>

提前谢谢


Tags: 文件代码gtparse错误linexmlops
1条回答
网友
1楼 · 发布于 2024-10-03 15:25:07

实际上,添加编码对我来说很有效

with open(log_file, 'r') as fr, open('XMLinLog2.xml', 'w', encoding='utf-8') as fw:
    fw.write("<document>\n")

    for line in fr:
        if line.strip().startswith('<'):
            fw.write('\t' + line)
    fw.write("\n</document>")

#  - Parsing Log files after cleanup  -

doc = ET.parse('XMLinLog2.xml')

相关问题 更多 >