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