使用python处理xml格式数据的方法介绍

本文实例讲述了python处理xml格式数据的方法。分享给大家供大家参考,具体如下:

这里的操作是基于python3平台。

在使用python处理xml的问题上,首先遇到的是编码问题。

python并不支持gb2312,所以面对encoding=”gb2312″的xml文件会出现错误。python读取的文件本身的编码也可能导致抛出异常,这种情况下打开文件的时候就需要指定编码。此外就是xml中节点所包含的中文。

我这里呢,处理就比较简单了,只需要修改xml的encoding头部。

#!/usr/bin/env python
import os, sys
import re
def replacexmlencoding(filepath, oldencoding=’gb2312′, newencoding=’utf-8′):
f = open(filepath, mode=’r’)
content = f.read()
content = re.sub(oldencoding, newencoding, content)
f.close()
f = open(filepath, mode=’w’)
f.write(content)
f.close()
if name == “main”:
replacexmlencoding(‘./activateaccount.xml’)

接着是使用xml.etree.elementtree来操作xml文件。

在一个类里面定义call函数可以使得该类可调用,比如下面代码的最后几行,在main函数中。这也很突出地体现了在python的世界里,一切都是对象,包括对象本身 :)

一直觉得main函数用来测试真是蛮好用的。

#!/usr/bin/env python
import os, re
import xml.etree.elementtree as etree
locale_path = “./locale.txt”
class xmlextractor(object):
def init(self):
pass
def call(self, filepath):
retdict = {}
f = open(filepath, ‘r’)
line = len(open(filepath, ‘r’).readlines())
retdict[‘line’] = line
tree = etree.parse(f)
root = tree.find(“resitem”)
id = root.get(“id”)
retdict[‘title’] = id
resitemcnt = len(list(root.findall(“resitem”))) + 1
retdict[‘resitemcount’] = resitemcnt
retdict[‘chinesetip’] = ‘none’
for child in root:
attrdict = child.attrib
keyword = “name”
if(keyword in attrdict.keys() and attrdict[‘name’] == “caption”):
if len(child.attrib[‘value’]) > 1:
if child.attrib[‘value’][0] == ‘~’:
title = child.attrib[‘value’][1:]
else:
title = child.attrib[‘value’][0:]
#print(title)
chs = open(locale_path).read()
pattern = ‘

Posted in 未分类