zoukankan      html  css  js  c++  java
  • 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类型即可。

  • 相关阅读:
    Spring中@Autowired注解与自动装配
    Nginx教程(一)-全面认知
    hadoop-mapreduce 详解
    python with hadoop
    大数据架构与技术选型
    hadoop-集群搭建
    虚拟机Vmware-网络配置
    linux 忘记密码
    高效编程之 小技巧归纳
    kafka 教程(四)-原理进阶
  • 原文地址:https://www.cnblogs.com/dasheng-maritime/p/7806355.html
Copyright © 2011-2022 走看看