python xml格式的execl读取数据

Posted Jason_WangYing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python xml格式的execl读取数据相关的知识,希望对你有一定的参考价值。

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2021/6/20 上午1:59
# @Author  : wangying
# @Site    : 
# @File    : xml格式xls.py
# @Software: PyCharm

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

class Xml2DataFrame:

    @staticmethod
    def read_xml(xmlFileName,sheet_tag = 0,header_row =0):
        '''
        读取xml数据,返回df
        sheet_tag:sheet的index
        header_row:header的起始行数
        '''
        # with open(xmlFileName, 'r') as xml_file:
        tree = ET.parse(xmlFileName)
        # 访问根节点
        root = tree.getroot()
        # 根据excel 的xml格式下找到具体的存放数据的标签 一般就是这个标签了
        Worksheet = tree.find('{urn:schemas-microsoft-com:office:spreadsheet}Worksheet') #--------------------查找第一标签中'Data'标签
        # 往下找标签 通过数组的方式
        table = Worksheet[0]##第一个就是   Worksheet子标签
        row_len = len(table) ## row长度
        # 我这里要把第一行当作表头 所以要取第一行做处理 如果不需要则忽略
        header_row = table[header_row]
        colums_conut = len(header_row)
        colums = []
        # 第一行做表头
        for i in range(colums_conut):
            c = header_row[i][0].text if header_row[i][0].text else 'index'
            colums.append(c)
        data_list = []
        # 遍历每一行的数据,返回dict
        for i in range(header_row+1,row_len):
            # 每一行的数据
            row = table[i]
            d_row = {}
            for i in range(colums_conut): ##去除第一行  以k-v的形式存
                value = row[i][0].text
                d_row[colums[i]] = value
            data_list.append(d_row)
        data_list
        # 将数据转化成df 不转化则直接使用
        return pd.DataFrame(data_list)


if __name__ == '__main__':

    excel_path = r'211111.xls'
    xml_df = Xml2DataFrame.read_xml(excel_path)    # 读取到df
    print(xml_df)

上面的那个是最简单的只是获取了数据还没写入execl,最后又优化了下,可以直接转成execl并写入文件系统

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2021/6/20 上午1:59
# @Author  : wangying
# @Site    : 
# @File    : xml格式xls.py
# @Software: PyCharm

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

class Xml2DataFrame:
    @staticmethod
    def read_xmls(xmlFileName, new_file_name = '转换过的_'):
        '''
        读取xml数据,用于返回多个sheet表格,请直接输出成xls文件
        new_file_name:如果需要覆盖直接传输'',不需要覆盖可以填写新的名称。
        '''
        # with open(xmlFileName, 'r') as xml_file:

        tree = ET.parse(xmlFileName)
        # 访问根节点
        root = tree.getroot()
        # 根据excel 的xml格式下找到具体的存放数据的标签 一般就是这个标签了
        Worksheets = tree.findall(
            '{urn:schemas-microsoft-com:office:spreadsheet}Worksheet')  # --------------------查找所有中'Data'标签
        write_workbook = xlwt.Workbook(encoding='utf-8')
        sheet_list = []
        for item in Worksheets:
            sheet_name = item.get('{urn:schemas-microsoft-com:office:spreadsheet}Name')
            write_sheet = write_workbook.add_sheet(sheet_name)
            # 往下找标签 通过数组的方式
            table = item[0]  ##第一个就是   Worksheet子标签
            row_len = len(table)  ## row长度
            # 从第一行开始读取数据
            header_row = table[0]
            colums_conut = len(header_row)
            colums = []
            data_list = []
            # 遍历每一行的数据,返回dict
            for i in range(0, row_len):
                # 每一行的数据
                row = table[i]
                colums_conut = len(row)
                colums = list(range(0,colums_conut))
                d_row = {}
                for j in range(colums_conut):  ##去除第一行  以k-v的形式存
                    value = row[j][0].text
                    write_sheet.write(i, j, label=value)
                    print(j)
                    print(value)
                    print(colums[j])
                    d_row[colums[j]] = value
                data_list.append(d_row)
            sheet_list.append(data_list)

        write_workbook.save(new_file_name+xmlFileName)
        # 将数据转化成df 不转化则直接使用
        return sheet_list


if __name__ == '__main__':

    excel_path = r'211111.xls'
    # xml_df = Xml2DataFrame.read_xml(excel_path,header_row=2)    # 读取到df
    xml_df = Xml2DataFrame.read_xmls(excel_path)
    print(xml_df)

源文件

以上是关于python xml格式的execl读取数据的主要内容,如果未能解决你的问题,请参考以下文章

java读取excel数据异常

Python openpyxl读取execl表数据

python操作execl表格常用方法-pandas

C# Execl表格文件转xml文件

导入execl,获取execl内的数据转换为table

xlrd 模块读取 execl 类的文件