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读取数据的主要内容,如果未能解决你的问题,请参考以下文章