【pandas 小记】pandas 读写xml文件


import xml.etree.ElementTree as ET
import pandas as pd

def iter_records(records):
    """
    遍历每个节点的生成器
    :param records:
    :return:
    """
    for record in records:
        temp_dict = {}  # 存储节点key-value
        for var in record:
            temp_dict[var.attrib['var_name']] = var.text
        # 生成值,即每个节点的数据
        yield temp_dict


def read_xml(xmlFileName):
    """
    读取xml数据,返回df
    :param xmlFileName:
    :return:
    """
    with open(xmlFileName, 'r') as xml_file:
        tree = ET.parse(xml_file)
        # 访问根节点
        root = tree.getroot()
        # 从根节点开始遍历,返回df
        return pd.DataFrame(list(iter_records(root)))


def xml_encode(row):
    """
    将每行数据转换成xml
    :param row:
    :return:
    """
    # 输出<record>节点开始标签 ,名称可以根据实际需要修改
    xmlItem = ['  <record>']
    # 转换成xml格式
    for field in row.index:
        line = '  <var var_name="{0}">{1}</var>'.format(field, row[field])
        xmlItem.append(line)

    # 输出<record>节点结束标签
    xmlItem.append('  </record>')

    # 返回结果
    return '\n'.join(xmlItem)


def write_xml(xmlFileName, data):
    """
    将数据写入xml文件
    :param xmlFileName:
    :param data:
    :return:
    """
    with open(xmlFileName, 'w') as xmlfile:
        # 写头部
        xmlfile.write(
            '<?xml version="1.0" encoding="UTF-8"?>'
        )
        xmlfile.write('<records>\n')   # 名称可以根据实际需要修改

        # 写数据
        xmlfile.write(
            '\n'.join(data.apply(xml_encode, axis=1))
        )
        xmlfile.write('\n</records>')   # 名称可以根据实际需要修改


xml_filenane = r'E:\data\realEstate_trans.xml'
new_filename = r'E:\data\realEstate_trans_output.xml'
xml_df = read_xml(xml_filenane)    # 读取到df
print(xml_df)
# write_xml(new_filename, xml_df)  # 写入新xml文件

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值