在Python中测试空的xml文件

时间:2017-07-31 15:55:39

标签: python xml elementtree

我有Python脚本将XML文件解析为另一个平台更友好的格式。

每隔一段时间,其中一个数据文件就不包含任何数据 - 只有编码信息而没有其他标签,这会导致ElementTree在找到它时抛出ParseError。

<?xml version="1.0" encoding="utf-8"?>

在调用ElementTree之前,有没有办法测试空文件?

的Ta。

3 个答案:

答案 0 :(得分:1)

你应该在这里请求原谅而不是许可

通过将代码包装在try/except块中来处理异常。

import xml.etree.ElementTree as ET
...
try:    
   tree = ET.parse(fooxml)
except ET.ParseError:
   # log error
   pass

答案 1 :(得分:0)

当然有几种方法,使用:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" 
  manifestVersion="1.0">
<assemblyIdentity
            type="win32"
            name="SideBySide"
            version="1.0.0.0" />
<clrClass
            clsid="{16AD5303-E154-44B4-A72B-C129859714AD}"
            progid="SideBySide.SideBySide"
            threadingModel="Both"
            name="SideBySide.SideBySideClass"
            runtimeVersion="v4.0.30319" >
</clrClass>
</assembly>

或使用if语句:

try:
    pass # delete this and add your parse code
except:
    pass # write your exception when empty

让我知道它是怎么回事!

答案 2 :(得分:0)

当然你可以捕获lxml引发的异常。如果要避免解析,可以检查文件是否只包含一个<符号:

with open("input.xml","rb") as f:
   contents = f.read()
   if contents.count(b"<")<=1:
      # empty or only header: skip
      pass
   else:
      x = etree.XML(contents)

当然,这种启发式方法不能防止其他解析错误。因此,最好只保护try/except块的解析。

但是这种方法的优点是如果你有很多腐败的1行和#34;只有#34;文件。