使用Python將JSON,XML和YAML數(shù)據(jù)寫入Excel文件
在當(dāng)今數(shù)據(jù)驅(qū)動(dòng)的技術(shù)生態(tài)中,JSON、XML和YAML作為主流結(jié)構(gòu)化數(shù)據(jù)格式,因其層次化表達(dá)能力和跨平臺(tái)兼容性,已成為系統(tǒng)間數(shù)據(jù)交換的通用載體。然而,當(dāng)需要將這類半結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)化為具備直觀可視化、動(dòng)態(tài)計(jì)算和協(xié)作共享特性的載體時(shí),Excel文件因其在商業(yè)分析、科研管理和跨部門協(xié)作中的不可替代性,成為數(shù)據(jù)落地的終極界面。通過(guò)Python實(shí)現(xiàn)這一轉(zhuǎn)換過(guò)程,不僅能突破不同數(shù)據(jù)范式間的語(yǔ)義鴻溝,更可構(gòu)建自動(dòng)化數(shù)據(jù)管道,在保留原始數(shù)據(jù)完整性的同時(shí),賦予其動(dòng)態(tài)排序、公式計(jì)算和數(shù)據(jù)透視等增值能力。本文將介紹如何使用Python導(dǎo)入JSON、XML和YAML格式數(shù)據(jù)到Excel文件中。
本文所使用的數(shù)據(jù)寫入方法需要用到Free Spire.XLS for Python,PyPI:pip install spire.xls.free
。
如何使用Python寫入數(shù)據(jù)到Excel工作表
我們可以使用Free Spire.XLS for Python提供的類、屬性和方法來(lái)創(chuàng)建或載入Excel文件,并處理數(shù)據(jù)到單元格的寫入以及工作表格式設(shè)置等操作。以下是操作步驟示例:
- 創(chuàng)建Workbook實(shí)例以新建Excel工作簿(新建的工作簿會(huì)有三個(gè)默認(rèn)工作表),或使用Workbook.LoadFromFile()方法載入已有工作簿。
- 使用Workbook.Worksheets.get_Item()方法獲取指定工作表,或使用Workbook.Worksheets.Add(sheetName: str)方法直接新建工作表。
- 通過(guò)json、xml.etree.ElementTree和yaml組件讀取相應(yīng)數(shù)據(jù)。
- 使用Worksheet.Range.get_Item()方法獲取指定單元格為CellRange對(duì)象,并使用CellRange.Value屬性講數(shù)據(jù)寫入單元格中。
- 使用CellRange.BuiltInStyle、CellRange.ApplyStyle()、Worksheet.AutoFitColumn()等屬性和方法,對(duì)工作表及單元格格式進(jìn)行設(shè)置。
- 使用Workbook.SaveToFile()方法保存Excel工作簿到文件。
用Python導(dǎo)入JSON數(shù)據(jù)到Excel工作表
JSON是一種輕量級(jí)數(shù)據(jù)交換格式,常用于Web應(yīng)用中前后端數(shù)據(jù)傳輸。在Python中,我們可以使用標(biāo)準(zhǔn)庫(kù)中的json內(nèi)置組件來(lái)解析JSON文件,并提取其中數(shù)據(jù)。提取到數(shù)據(jù)之后,我們可以使用Spire.XLS for Python將其寫入Excel工作表并自定義格式,完成JSON數(shù)據(jù)到Excel文件的導(dǎo)入。
代碼示例:
# 導(dǎo)入所需庫(kù) from spire.xls import Workbook, FileFormat, BuiltInStyles import json # 讀取并解析JSON訂單數(shù)據(jù) with open("E-Commerce Order Data.json", "r", encoding="utf-8") as f: jsonData = json.load(f) # 定義Excel列標(biāo)題 headers = ["order_id", "customer", "order_date", "status", "total", "product", "quantity", "price"] # 將嵌套的JSON結(jié)構(gòu)轉(zhuǎn)換為扁平化表格數(shù)據(jù) rows = [] for order in jsonData: for item in order["items"]: # 合并訂單主數(shù)據(jù)和商品明細(xì)數(shù)據(jù) row = [ order["order_id"], order["customer"], order["order_date"], order["status"], str(order["total"]), item["product"], str(item["quantity"]), str(item["price"]) ] rows.append(row) # 初始化Excel工作簿和工作表 workbook = Workbook() workbook.Worksheets.Clear() sheet = workbook.Worksheets.Add("Orders") # 寫入表頭到首行 for col, header in enumerate(headers): sheet.Range[1, col + 1].Value = header # 寫入數(shù)據(jù)行內(nèi)容 for row_idx, row_data in enumerate(rows): for col_idx, value in enumerate(row_data): sheet.Range[row_idx + 2, col_idx + 1].Value = value # 設(shè)置表格樣式 sheet.Rows[0].BuiltInStyle = BuiltInStyles.Heading2 # 標(biāo)題行樣式 for row in range(1, sheet.Rows.Count): sheet.Rows[row].BuiltInStyle = BuiltInStyles.Accent2_40 # 數(shù)據(jù)行樣式 # 自動(dòng)調(diào)整列寬 for col in range(sheet.Columns.Count): sheet.AutoFitColumn(col + 1) # 保存并釋放資源 workbook.SaveToFile("output/JSONToExcel.xlsx", FileFormat.Version2016) workbook.Dispose()
為了演示清晰,以上代碼直接基于已知的字段結(jié)構(gòu)進(jìn)行提取。在實(shí)際項(xiàng)目中,建議根據(jù)具體的數(shù)據(jù)格式動(dòng)態(tài)處理字段,或增加容錯(cuò)邏輯以應(yīng)對(duì)結(jié)構(gòu)變動(dòng)。
JSON文件:
輸出Excel文件:
用Python導(dǎo)入XML數(shù)據(jù)到Excel工作表
XML是一種標(biāo)記語(yǔ)言,適合表示結(jié)構(gòu)復(fù)雜的數(shù)據(jù),支持豐富的功能(如屬性、注釋)。同樣,Python標(biāo)準(zhǔn)庫(kù)也提供了xml.etree.ElementTree組件,可以幫助我們提取XML文件中的數(shù)據(jù)。我們可以使用該組件搭配Free Spire.XLS for Python來(lái)實(shí)現(xiàn)導(dǎo)入XML數(shù)據(jù)到Excel文件。
代碼示例:
# 導(dǎo)入XML處理庫(kù)和Excel操作庫(kù) import xml.etree.ElementTree as ET from spire.xls import Workbook, FileFormat, BuiltInStyles # 解析XML變更日志文件 tree = ET.parse("Software Manual Changelog.xml") root = tree.getroot() # 定義表格列標(biāo)題 headers = ["version", "date", "editor", "change"] rows = [] # 提取并轉(zhuǎn)換XML數(shù)據(jù)結(jié)構(gòu) for entry in root.findall("entry"): # 提取公共字段 version = entry.findtext("version", "") date = entry.findtext("date", "") editor = entry.findtext("editor", "") # 展開多個(gè)變更條目為獨(dú)立行 for change in entry.find("changes").findall("change"): rows.append([version, date, editor, change.text.strip()]) # 創(chuàng)建Excel工作簿 workbook = Workbook() workbook.Worksheets.Clear() sheet = workbook.Worksheets.Add("Changelog") # 寫入表格標(biāo)題行 for col, header in enumerate(headers): sheet.Range[1, col + 1].Value = header # 填充變更記錄數(shù)據(jù) for row_idx, row_data in enumerate(rows): for col_idx, value in enumerate(row_data): sheet.Range[row_idx + 2, col_idx + 1].Value = value # 應(yīng)用樣式模板 sheet.Rows[0].BuiltInStyle = BuiltInStyles.Heading1 # 主標(biāo)題樣式 for row in range(1, sheet.Rows.Count): sheet.Rows[row].BuiltInStyle = BuiltInStyles.Accent1_40 # 交替行底色 # 自適應(yīng)列寬設(shè)置 for col in range(sheet.Columns.Count): sheet.AutoFitColumn(col + 1) # 輸出文件并釋放資源 workbook.SaveToFile("output/XMLToExcel.xlsx", FileFormat.Version2016) workbook.Dispose()
為了演示清晰,以上代碼直接基于已知的字段結(jié)構(gòu)進(jìn)行提取。在實(shí)際項(xiàng)目中,建議根據(jù)具體的數(shù)據(jù)格式動(dòng)態(tài)處理字段,或增加容錯(cuò)邏輯以應(yīng)對(duì)結(jié)構(gòu)變動(dòng)。
XML文件:
輸出的Excel文件:
用Python導(dǎo)入YAML數(shù)據(jù)到Excel工作表
YAML是一種簡(jiǎn)潔易讀的配置文件格式,常用于DevOps和項(xiàng)目配置。雖然YAML通常不用于存儲(chǔ)表格型數(shù)據(jù),但很多結(jié)構(gòu)化配置可轉(zhuǎn)換成Excel表做審閱、記錄或共享等,在這些實(shí)際場(chǎng)景中非常實(shí)用。我們可以使用Python標(biāo)準(zhǔn)庫(kù)中的yaml組件處理YAML文件數(shù)據(jù),然后將其導(dǎo)入Excel文件中。
代碼示例:
# 導(dǎo)入YAML處理庫(kù)和Excel操作庫(kù) import yaml from spire.xls import Workbook, FileFormat, BuiltInStyles # 加載CI/CD流水線配置文件 with open("CI CD Pipeline Configuration.yaml", "r", encoding="utf-8") as f: yaml_data = yaml.safe_load(f) # 安全解析YAML內(nèi)容 # 定義流水線分析報(bào)表列結(jié)構(gòu) headers = ["stage", "command", "output_file", "coverage", "environment"] rows = [] # 展開流水線階段的多維數(shù)據(jù) for stage in yaml_data["stages"]: # 提取階段基礎(chǔ)信息 name = stage.get("name", "") commands = stage.get("commands", []) coverage = str(stage.get("coverage", "")) # 數(shù)值轉(zhuǎn)字符串 environment = stage.get("environment", "") outputs = stage.get("artifacts", []) or [""] # 處理空輸出文件情況 # 按命令展開明細(xì)行 for i, cmd in enumerate(commands): # 合并數(shù)據(jù)時(shí)保持指標(biāo)數(shù)據(jù)首行展示 row = [ name, cmd, outputs[i] if i < len(outputs) else "", # 匹配命令與產(chǎn)出文件 coverage if i == 0 else "", # 覆蓋率僅首行保留 environment if i == 0 else "" # 環(huán)境信息僅首行保留 ] rows.append(row) # 創(chuàng)建報(bào)表工作簿 workbook = Workbook() workbook.Worksheets.Clear() sheet = workbook.Worksheets.Add("Pipeline") # 構(gòu)建表頭結(jié)構(gòu) for col, header in enumerate(headers): sheet.Range[1, col + 1].Value = header # 填充動(dòng)態(tài)生成的流水線數(shù)據(jù) for row_idx, row_data in enumerate(rows): for col_idx, value in enumerate(row_data): sheet.Range[row_idx + 2, col_idx + 1].Value = str(value) # 強(qiáng)制轉(zhuǎn)為字符串格式 # 應(yīng)用階梯式樣式方案 sheet.Rows[0].BuiltInStyle = BuiltInStyles.Heading4 # 深色漸變標(biāo)題 for row in range(1, sheet.Rows.Count): sheet.Rows[row].BuiltInStyle = BuiltInStyles.Accent2_40 # 淺色交替行背景 # 優(yōu)化列顯示寬度 for col in range(sheet.Columns.Count): sheet.AutoFitColumn(col + 1) # 持久化報(bào)表文件 workbook.SaveToFile("output/YAMLToExcel.xlsx", FileFormat.Version2016) workbook.Dispose()
為了演示清晰,以上代碼直接基于已知的字段結(jié)構(gòu)進(jìn)行提取。在實(shí)際項(xiàng)目中,建議根據(jù)具體的數(shù)據(jù)格式動(dòng)態(tài)處理字段,或增加容錯(cuò)邏輯以應(yīng)對(duì)結(jié)構(gòu)變動(dòng)。
YAML文件:
輸出的Excel文件:
本文演示如何導(dǎo)入數(shù)據(jù)到Excel文件,包括JSON、XML和YAML數(shù)據(jù)到Excel工作表的導(dǎo)入,提供步驟介紹及代碼示例。
到此這篇關(guān)于使用Python將JSON,XML和YAML數(shù)據(jù)寫入Excel文件的文章就介紹到這了,更多相關(guān)Python數(shù)據(jù)寫入Excel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python中報(bào)錯(cuò)"json.decoder.JSONDecodeError: Expecting value:"的解決
這篇文章主要介紹了python中報(bào)錯(cuò)"json.decoder.JSONDecodeError: Expecting value:"的解決方法 ,需要的朋友可以參考下2019-04-04如何用python開發(fā)Zeroc Ice應(yīng)用
這篇文章主要介紹了如何用python開發(fā)Zeroc Ice應(yīng)用,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2021-01-01詳解python __init__.py 和 __all__作用
導(dǎo)入文件夾包的時(shí)候,會(huì)運(yùn)行寫在該文件夾包下的__init__.py文件,這主要是__init__.py的作用,本文結(jié)合示例代碼介紹了python __init__.py 和 __all__作用,感興趣的朋友一起看看吧2023-02-02python 簡(jiǎn)單的繪圖工具turtle使用詳解
這篇文章主要介紹了python 簡(jiǎn)單的繪圖工具turtle使用詳解的相關(guān)資料,需要的朋友可以參考下2017-06-06Python中count統(tǒng)計(jì)指定字符、元素出現(xiàn)次數(shù)的實(shí)現(xiàn)
本文主要介紹了Python中count統(tǒng)計(jì)指定字符、元素出現(xiàn)次數(shù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07Django Rest framework三種分頁(yè)方式詳解
這篇文章主要介紹了Django Rest framework三種分頁(yè)方式詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07