pythonxml读写_python 读写XML

参考

http://yshblog.com/blog/151

# coding:utf-8

import os

import sys

from lxml import etree

sys.path.append(os.path.dirname(os.path.dirname(__file__)))

from abbr_extractor.pgconnect import PgConnect

from common_tool.common_utils import get_latest_database_name, region_version

from db_options import get_all_host_options, get_all_database, select_u_turn_info

def collect_all_u_turn_info():

host_option_list = get_all_host_options()

# get all database name

database_host_dic = {}

database_name_list = []

for host_option in host_option_list:

pg_conn = PgConnect(host_option)

if pg_conn.init_db():

host_database_list = get_all_database(pg_conn)

database_name_list += host_database_list

for name in host_database_list:

database_host_dic[name] = host_option

# get the latest database

latest_name_list = get_latest_database_name(database_name_list)

print latest_name_list

# sql uturn

u_turn_info_list_all = []

for database_name in latest_name_list:

region, version = region_version(database_name)

host_option = database_host_dic.get(database_name)

host_option.dbname = database_name

pg_conn = PgConnect(host_option)

if pg_conn.init_db():

u_turn_info_list = select_u_turn_info(pg_conn)

for u_turn_info in u_turn_info_list:

setattr(u_turn_info, "region", region)

u_turn_info_list_all += u_turn_info_list

return u_turn_info_list_all

def save_u_turn_to_xml(u_turn_info_list, save_xml_filename):

root = etree.Element('u-turn_config', nsmap={"xmlns": 'http://www.w3.org/2001/XMLSchema-instance'})

for u_turn in u_turn_info_list:

record_node = etree.Element('record')

root.append(record_node)

admin_place_id_node = etree.Element('admin_place_id')

record_node.append(admin_place_id_node)

admin_place_id_node.text = "%s" % u_turn.admin_place_id

admin_type_node = etree.Element('admin_type')

record_node.append(admin_type_node)

admin_type_node.text = "%s" % u_turn.admin_type

admin_name_node = etree.Element("admin_name")

record_node.append(admin_name_node)

if isinstance(u_turn.admin_name, str):

u_turn.admin_name = unicode(u_turn.admin_name, 'utf-8')

admin_name_node.text = u_turn.admin_name

country_node = etree.Element("country")

record_node.append(country_node)

country_node.text = u_turn.country

region_node = etree.Element("region")

record_node.append(region_node)

region_node.text = u_turn.region.lower()

tree = etree.ElementTree(root)

tree.write(save_xml_filename, pretty_print=True, xml_declaration=True, encoding='utf-8')

print "write content to [%s] finish." % save_xml_filename

def read_u_turn_xml(xml_file_path):

xml = etree.parse(xml_file_path)

root = xml.getroot()

u_turn_info_list = []

for recode_node in root.getchildren():

from db_options import Options

u_turn_info = Options()

for tag_node in recode_node.getchildren():

tag_name = tag_node.tag

tag_text = tag_node.text

setattr(u_turn_info, tag_name, tag_text)

u_turn_info_list.append(u_turn_info)

return u_turn_info_list

if __name__ == '__main__':

u_turn_list = collect_all_u_turn_info()

save_u_turn_to_xml(u_turn_list, 'uturn_auto.xml')

# u_turn_list = read_u_turn_xml('uturn.xml')

# u_turn_list.sort(key=lambda d: d.admin_place_id)

# save_u_turn_to_xml(u_turn_list, 'uturn_sort.xml')

遇到的问题有:

写入时候的编码问题,将str类型转换为 unicode类型即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值