Python读取Excel写入Xml


1.读取Excel

最简单的方式:使用xlrd模块

import xlrd
xlrd.open_workbook('filename.xls')

注意,可能出现问题,由于可能不是标准的xls文件,可能出现错误,如下:

xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b'<html xm'

在StackOverflow上查找原因与解决办法发现,非标准的Excel文件都会发生该错误。使用VsCode打开xls文件,内容头部如下

此处编码是html形式,并非标准的Excel, 所以更换模块pandas进行数据处理,代码如下:

import pandas as pd
from xml.dom.minidom import parse


def xls_2_dict_list(xls_path):
    #列表记录每一行的数据
    bill_list = list()
    #导入pandas模块以html形式读取文件,返回类型为list
    data_list = pd.read_html(xls_path)  

    for i in range(len(data_list[2])):
        #使用字典的key-value形式记录数据(伪代码)
        bill_dict = dict().fromkeys(key_list)#key_list为字典的所有key
        #data_list[0]为Panas处理后的数据帧,类型pandas.core.frame.DataFrame,包含的方法请复制自查,包含多行多列的数据
        #使用iat获取指定行和列的数据
        bill_dict['key1'] = data_list[0].iat[1,1]
        bill_dict['key2'] = data_list[2].iat[i,7]
        bill_dict['key3'] = data_list[2].iat[i,8]
        bill_dict['key4'] = data_list[2].iat[i,0]
        #将字典添加到链表中,代表一行数据
        bill_list.append(bill_dict)
    return bill_list
        

2.操作XML

根据要求:目的是替换节点的值,所以先获取元素再替换值,然后将模型写入。代码如下:

from xml.dom.minidom import parse

def dict_2_xml(xml_path,xml_dict):
    #从文件中解析dom模型
    dom = parse('bill_formwork.xml')
    for k,v in xml_dict.items():
        #获取元素,并替换值
        dom.getElementsByTagName(k)[0].childNodes[0].data = v
    #将更新后的dom模型使用字节流写入xml文件中
    with open(xml_path,'wb',encoding='utf-8') as f:
        f.write(dom.toxml(encoding='utf-8'))

注意,如果将写入代码替换为以下代码可能会出现中文乱码的问题(建议使用上面的方法)。原因可能是字符串写入导致的问题,所以建议使用上面利用字节流写入而非字符流。

    #使用字符流容易造成乱码问题
    with open(xml_path,'w') as f:
        dom.writexml(f,encoding='utf-8')

 其他解决方法,打开文件流时,指定编码格式,即open函数内添加参数encoding=‘utf-8’。

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM