在Python中测试一个空的xml文件
我有Python脚本来将XML文件解析为另一个平台更友好的格式。在Python中测试一个空的xml文件
每隔一段时间,其中一个数据文件不包含任何数据 - 只有编码信息和其他标记,这会导致ElementTree在找到它们时抛出ParseError。
<?xml version="1.0" encoding="utf-8"?>
有没有在调用ElementTree之前测试空文件的方法?
Ta。
当然有几种方法,使用方法:
try:
pass # delete this and add your parse code
except:
pass # write your exception when empty
或使用if语句:
if (some code to evalue if xml is not empty):
# your code
elif (some code to check if .xml is empty):
# your code
让我知道是怎么回事!
谢谢 - 尝试/捕捉正是我所期待的。 – TheFormerAstronomer
如果我的回答在某种程度上有帮助,请投票! ( :) – Manu
我做过了 - 显然我没有足够的积分来计算它,对不起;( – TheFormerAstronomer
当然你可以发现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
块的解析。
但是,如果你有很多损坏的单行“头只”文件,这种方法的优点是速度非常快。
你应该请求原谅不允许这里。
通过将代码包装在try/except
块中来处理异常。
import xml.etree.ElementTree as ET
...
try:
tree = ET.parse(fooxml)
except ET.ParseError:
# log error
pass
谢谢 - 这看起来很完美,我有其他编程经验,但我的Python知识有点不到8个小时,我必须急于做到这一点;) – TheFormerAstronomer
@TheFormerAstronomer你有足够的点接受答案... –
可能是数据中的“
Err,'endswith(“?>”)''怎么样? –