这几天做了这样一件事情,整理并筛选数据库数据建立数据日志,要求文件为.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