博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 读写XML
阅读量:4693 次
发布时间:2019-06-09

本文共 3653 字,大约阅读时间需要 12 分钟。

参考

http://yshblog.com/blog/151

# coding:utf-8import osimport sysfrom lxml import etreesys.path.append(os.path.dirname(os.path.dirname(__file__)))from abbr_extractor.pgconnect import PgConnectfrom common_tool.common_utils import get_latest_database_name, region_versionfrom db_options import get_all_host_options, get_all_database, select_u_turn_infodef 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_alldef 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_filenamedef 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_listif __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类型即可。

转载于:https://www.cnblogs.com/dasheng-maritime/p/7806355.html

你可能感兴趣的文章
C# Web版报表
查看>>
中国城市json
查看>>
LeetCode OJ 238. Product of Array Except Self 解题报告
查看>>
使用外网访问阿里云服务器ZooKeeper
查看>>
Java代码检查工具
查看>>
深入了解VC++编译器【转】
查看>>
响应式图片
查看>>
如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion
查看>>
iOS音频播放(一):概述
查看>>
Android之使用AchartEngineActivity引擎绘制柱状图、曲线图
查看>>
android对象巧用Android网络通信技术,在网络上直接传输对象
查看>>
android下载手动下载Android SDK
查看>>
oracle12c(oracle12.1.0.1.0)安装指南--实测OEL5.9(RH5)
查看>>
北京邮电大学 程序设计课程设计 电梯 文件输入版本(已调试,大致正确运行==)...
查看>>
HashMap的两种排序方式
查看>>
Spring的第一个例子
查看>>
从Firefox升级说学习方法
查看>>
C++学习:任意合法状态下汉诺塔的移动(原创)
查看>>
【杂文】记一些有用的神奇网站
查看>>
什么是“闭包”(closure)为什么要用它?
查看>>