python如何编写树_使用python ElementTree的itertree函数编写修改树输出fi

如果您有一个大的xml不能放入内存,那么可以尝试一次序列化一个元素。例如,假设...文档结构并忽略可能的命名空间问题:import xml.etree.cElementTree as etree

def getelements(filename_or_file, tag):

context = iter(etree.iterparse(filename_or_file, events=('start', 'end')))

_, root = next(context) # get root element

for event, elem in context:

if event == 'end' and elem.tag == tag:

yield elem

root.clear() # free memory

with open('output.xml', 'wb') as file:

# start root

file.write(b'')

for page in getelements('sample.xml', 'page'):

if keep(page):

file.write(etree.tostring(page, encoding='utf-8'))

# close root

file.write(b'')

其中keep(page)返回True如果page应该保留,例如:

^{pr2}$

为了进行比较,要修改一个小的xml文件,您可以:# parse small xml

tree = etree.parse('sample.xml')

# remove some root/page elements from xml

root = tree.getroot()

for page in root.findall('page'):

if not keep(page):

root.remove(page) # modify inplace

# write to a file modified xml tree

tree.write('output.xml', encoding='utf-8')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值