Python XML数据表格转.xlsx数据表格

这几天做了这样一件事情,整理并筛选数据库数据建立数据日志,要求文件为.xlsx文件。本来想用QT写处理代码的,毕竟这是我熟悉的领域,但是听说Python处理起来项目建立的更简单,所以用Python写了。
然后咱就想Python直接来处理数据库数据有点麻烦,毕竟咱也没有接触过,只能导出Excel表格再对文件处理了,这样就比较熟悉了,然后就发生了,SQLYog只能转.xml形式的数据表格,可能是太久没更新了,懒得更新,于是就找代码XML文件转Excel文件,大多数都设置格式是直接读XML文件,利用openpyxl库和pandas来转,大概就是
1 以目标格式读数据
2 调用to_excel存数据
结果,总是有问题,可能是由于这个XML表格文件可以通过Excel表格的形式使用office xml handler打开,我一直以为它就是个Excel表格,反正经过一天,终于给我整出来了,方法如下:


1、需要有这几个库
 
pip install openpyxl

pip install pandas #这个必须要1.3的版本,我也是更新了Python3.12才正好的

pip install lxml #这个安装我的时候特别慢 增加延时了,反正干等着就好了
pip install lxml --timeout 1000  #单位是秒

这里说一下 lxm库,我也不太知怎么回事,运行时提示我缺少这个库我才安装的,不用导入到Python文件中,需要导入只有那两个,还有其他基础的自己看需要啥就导入啥
 

import openpyxl
import pandas as pd
2、看看你的数据有几个列,就是每行有几个数据:
 
num_per_row = 25
3、读数据
 
#格式如下,给XML数据GPT得到的,大概意思就是,
#一个XPath表达式匹配你需要的元素
#一个命名空间提供命名空间,大概就是匹配前缀的意思:
xpath_expression = ".//ss:Row/ss:Cell"
namespaces = {
    "ss": "urn:schemas-microsoft-com:office:spreadsheet"
}
#调用rend_xml函数读取
data = pd.read_xml(file_path, xpath=xpath_expression, namespaces=namespaces)
4、关键部分,设置表格的格式
#先打印一下data 看看都有啥列,这里我的数据都在Data列,所以只要Data列:
data_values = data['Data'].tolist()

#做表格,len(data_values)是总行数:
df = pd.DataFrame([data_values[i:i+num_per_row] for i in range(num_per_row, len(data_values), num_per_row)])
        df.columns = data_values[:num_per_row]
5、保存
#output_file_path替换成你的目标文件路径,是个字符串
df.to_excel(output_file_path, index=False)
6、封装一下:
#传入XML文件路径,在.py同目录下生成对应的.xlsx文件,这里固定文件名称为4位了
def convert_xml_to_excel(file_path):
    try:
        num_per_row = 25 #每行25个数据
        # 从 XML 文件读取数据
        xpath_expression = ".//ss:Row/ss:Cell"
        namespaces = {
            "ss": "urn:schemas-microsoft-com:office:spreadsheet"
        }
        data = pd.read_xml(file_path, xpath=xpath_expression, namespaces=namespaces)
        print('.xml读取完成:')
        data_values = data['Data'].tolist()
        # df = pd.DataFrame([data_values[i:i+num_per_row] for i in range(0, len(data_values), num_per_row)])#保留表头作为数据
        df = pd.DataFrame([data_values[i:i+num_per_row] for i in range(num_per_row, len(data_values), num_per_row)])
        df.columns = data_values[:num_per_row]
        # 保存为 Excel 文件
        output_file_path = f"{file_path[-8:-4]}.xlsx"  # 根据 XML 文件名生成 Excel 文件名
        # data.to_excel(output_file_path, index=False)
        df.to_excel(output_file_path, index=False)
        print('.xml写入.xlsx完成')
        
        print(f"成功转换并保存为:{output_file_path}")
    except Exception as e:
        print(f"发生错误: {e}")
        # raise

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值