使用Python写入JSON、XML和YAML数据到Excel文件

在当今数据驱动的技术生态中,JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体。然而,当需要将这类半结构化数据转化为具备直观可视化、动态计算和协作共享特性的载体时,Excel文件因其在商业分析、科研管理和跨部门协作中的不可替代性,成为数据落地的终极界面。通过Python实现这一转换过程,不仅能突破不同数据范式间的语义鸿沟,更可构建自动化数据管道,在保留原始数据完整性的同时,赋予其动态排序、公式计算和数据透视等增值能力。本文将介绍如何使用Python导入JSON、XML和YAML格式数据到Excel文件中。

本文所使用的数据写入方法需要用到Free Spire.XLS for Python,PyPI:pip install spire.xls.free


如何使用Python写入数据到Excel工作表

我们可以使用Free Spire.XLS for Python提供的类、属性和方法来创建或载入Excel文件,并处理数据到单元格的写入以及工作表格式设置等操作。以下是操作步骤示例:

  1. 创建Workbook实例以新建Excel工作簿(新建的工作簿会有三个默认工作表),或使用Workbook.LoadFromFile()方法载入已有工作簿。
  2. 使用Workbook.Worksheets.get_Item()方法获取指定工作表,或使用Workbook.Worksheets.Add(sheetName: str)方法直接新建工作表。
  3. 通过json、xml.etree.ElementTree和yaml组件读取相应数据。
  4. 使用Worksheet.Range.get_Item()方法获取指定单元格为CellRange对象,并使用CellRange.Value属性讲数据写入单元格中。
  5. 使用CellRange.BuiltInStyleCellRange.ApplyStyle()Worksheet.AutoFitColumn()等属性和方法,对工作表及单元格格式进行设置。
  6. 使用Workbook.SaveToFile()方法保存Excel工作簿到文件。

用Python导入JSON数据到Excel工作表

JSON是一种轻量级数据交换格式,常用于Web应用中前后端数据传输。在Python中,我们可以使用标准库中的json内置组件来解析JSON文件,并提取其中数据。提取到数据之后,我们可以使用Spire.XLS for Python将其写入Excel工作表并自定义格式,完成JSON数据到Excel文件的导入。

代码示例:

# 导入所需库
from spire.xls import Workbook, FileFormat, BuiltInStyles
import json

# 读取并解析JSON订单数据
with open("E-Commerce Order Data.json", "r", encoding="utf-8") as f:
    jsonData = json.load(f)

# 定义Excel列标题
headers = ["order_id", "customer", "order_date", "status", "total", "product", "quantity", "price"]

# 将嵌套的JSON结构转换为扁平化表格数据
rows = []
for order in jsonData:
    for item in order["items"]:
        # 合并订单主数据和商品明细数据
        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

# 写入数据行内容
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

# 设置表格样式
sheet.Rows[0].BuiltInStyle = BuiltInStyles.Heading2  # 标题行样式
for row in range(1, sheet.Rows.Count):
    sheet.Rows[row].BuiltInStyle = BuiltInStyles.Accent2_40  # 数据行样式

# 自动调整列宽
for col in range(sheet.Columns.Count):
    sheet.AutoFitColumn(col + 1)

# 保存并释放资源
workbook.SaveToFile("output/JSONToExcel.xlsx", FileFormat.Version2016)
workbook.Dispose()

💡为了演示清晰,以上代码直接基于已知的字段结构进行提取。在实际项目中,建议根据具体的数据格式动态处理字段,或增加容错逻辑以应对结构变动。

JSON文件
Python读取JSON数据

输出Excel文件
Python导入JSON数据到Excel文件


用Python导入XML数据到Excel工作表

XML是一种标记语言,适合表示结构复杂的数据,支持丰富的功能(如属性、注释)。同样,Python标准库也提供了xml.etree.ElementTree组件,可以帮助我们提取XML文件中的数据。我们可以使用该组件搭配Free Spire.XLS for Python来实现导入XML数据到Excel文件。

代码示例:

# 导入XML处理库和Excel操作库
import xml.etree.ElementTree as ET
from spire.xls import Workbook, FileFormat, BuiltInStyles

# 解析XML变更日志文件
tree = ET.parse("Software Manual Changelog.xml")
root = tree.getroot()

# 定义表格列标题
headers = ["version", "date", "editor", "change"]
rows = []

# 提取并转换XML数据结构
for entry in root.findall("entry"):
    # 提取公共字段
    version = entry.findtext("version", "")
    date = entry.findtext("date", "")
    editor = entry.findtext("editor", "")

    # 展开多个变更条目为独立行
    for change in entry.find("changes").findall("change"):
        rows.append([version, date, editor, change.text.strip()])

# 创建Excel工作簿
workbook = Workbook()
workbook.Worksheets.Clear()
sheet = workbook.Worksheets.Add("Changelog")

# 写入表格标题行
for col, header in enumerate(headers):
    sheet.Range[1, col + 1].Value = header

# 填充变更记录数据
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

# 应用样式模板
sheet.Rows[0].BuiltInStyle = BuiltInStyles.Heading1  # 主标题样式
for row in range(1, sheet.Rows.Count):
    sheet.Rows[row].BuiltInStyle = BuiltInStyles.Accent1_40  # 交替行底色

# 自适应列宽设置
for col in range(sheet.Columns.Count):
    sheet.AutoFitColumn(col + 1)

# 输出文件并释放资源
workbook.SaveToFile("output/XMLToExcel.xlsx", FileFormat.Version2016)
workbook.Dispose()

💡为了演示清晰,以上代码直接基于已知的字段结构进行提取。在实际项目中,建议根据具体的数据格式动态处理字段,或增加容错逻辑以应对结构变动。

XML文件:
Python读取XML数据

输出的Excel文件
Python导入XML数据到Excel文件


用Python导入YAML数据到Excel工作表

YAML是一种简洁易读的配置文件格式,常用于DevOps和项目配置。虽然YAML通常不用于存储表格型数据,但很多结构化配置可转换成Excel表做审阅、记录或共享等,在这些实际场景中非常实用。我们可以使用Python标准库中的yaml组件处理YAML文件数据,然后将其导入Excel文件中。

代码示例:

# 导入YAML处理库和Excel操作库
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内容

# 定义流水线分析报表列结构
headers = ["stage", "command", "output_file", "coverage", "environment"]
rows = []

# 展开流水线阶段的多维数据
for stage in yaml_data["stages"]:
    # 提取阶段基础信息
    name = stage.get("name", "")
    commands = stage.get("commands", [])
    coverage = str(stage.get("coverage", ""))  # 数值转字符串
    environment = stage.get("environment", "")
    outputs = stage.get("artifacts", []) or [""]  # 处理空输出文件情况

    # 按命令展开明细行
    for i, cmd in enumerate(commands):
        # 合并数据时保持指标数据首行展示
        row = [
            name,
            cmd,
            outputs[i] if i < len(outputs) else "",  # 匹配命令与产出文件
            coverage if i == 0 else "",  # 覆盖率仅首行保留
            environment if i == 0 else ""  # 环境信息仅首行保留
        ]
        rows.append(row)

# 创建报表工作簿
workbook = Workbook()
workbook.Worksheets.Clear()
sheet = workbook.Worksheets.Add("Pipeline")

# 构建表头结构
for col, header in enumerate(headers):
    sheet.Range[1, col + 1].Value = header

# 填充动态生成的流水线数据
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)  # 强制转为字符串格式

# 应用阶梯式样式方案
sheet.Rows[0].BuiltInStyle = BuiltInStyles.Heading4  # 深色渐变标题
for row in range(1, sheet.Rows.Count):
    sheet.Rows[row].BuiltInStyle = BuiltInStyles.Accent2_40  # 浅色交替行背景

# 优化列显示宽度
for col in range(sheet.Columns.Count):
    sheet.AutoFitColumn(col + 1)

# 持久化报表文件
workbook.SaveToFile("output/YAMLToExcel.xlsx", FileFormat.Version2016)
workbook.Dispose()

💡为了演示清晰,以上代码直接基于已知的字段结构进行提取。在实际项目中,建议根据具体的数据格式动态处理字段,或增加容错逻辑以应对结构变动。
YAML文件
Python读取YAML数据

输出的Excel文件
Python导入YAML数据到Excel文件


本文演示如何导入数据到Excel文件,包括JSON、XML和YAML数据到Excel工作表的导入,提供步骤介绍及代码示例。

<think> 我们正在讨论的是如何创建用于YOLO训练的数据集配置文件YAML文件),而不是转换标注文件本身。用户的问题集中在:“如何将json、txt、xml文件转换为用于yolo训练模型的yaml文件”。这里需要澄清: YAML配置文件(dataset.yaml)仅包含数据集路径类别信息,不包含具体的标注数据。而json/txt/xml文件通常是标注文件(包含每个图像的边界框等信息)。因此,用户可能混淆了两种文件的作用。 正确的流程是: 1. 将各种格式的标注文件json/txt/xml)转换为YOLO格式的标注文件(每个图像对应一个.txt文件,每行包含:class_id center_x center_y width height,均为归一化坐标)。 2. 组织数据集目录结构(通常包含imageslabels两个子目录,分别存放图像对应的YOLO格式标注文件)。 3. 创建YAML配置文件,指明训练集、验证集的图像路径以及类别名称列。 因此,我们需要解释的是如何从原始标注文件json/txt/xml)转换到YOLO格式的标注文件,然后创建YAML配置文件。 参考引用中的信息: - 引用[3]提到了将labelme的json文件转换为yolo格式。 - 引用[4]提到了将paddlepaddle导出的json文件转换为yolo格式。 所以,回答应该分为两部分: 第一部分:将不同格式的标注文件转换为YOLO格式(.txt文件) 第二部分:创建YAML配置文件 由于用户问的是“转换为YOLO训练模型所用yaml文件”,我们重点在第二部分,但第一部分是必要前提。 步骤: 1. 转换标注文件为YOLO格式(以labelme的json为例,其他类似) 2. 组织目录结构 3. 编写YAML文件 注意:用户可能已经完成了标注文件的转换,只是不知道如何写YAML文件。因此,我们也要强调YAML文件的内容。 </think> 根据您的需求,我将详细解释如何将不同格式的标注文件转换为YOLO训练所需的YAML配置文件。以下分步骤说明: ### 一、理解YAML配置文件的作用 YOLO训练所需的YAML文件(`dataset.yaml`)**不包含实际注解数据**,而是定义: 1. 数据集路径(训练/验证/测试集) 2. 类别数量(`nc`) 3. 类别名称列(`names`) ```yaml # 示例dataset.yaml结构 train: path/to/train/images val: path/to/val/images nc: 5 names: ['cat', 'dog', 'car', 'person', 'bicycle'] ``` ### 二、从不同格式转换标注数据的步骤 实际标注转换需先转为YOLO格式(每张图对应一个`.txt`文件),然后创建YAML配置文件: #### 1. JSON → YOLO格式(LabelMe示例) ```python import json import os def json_to_yolo(json_path, output_dir): with open(json_path) as f: data = json.load(f) for shape in data['shapes']: label = shape['label'] points = shape['points'] # 将坐标转换为YOLO格式(归一化坐标)[^3] # 计算中心点、宽高归一化值... # 写入YOLO格式.txt文件 txt_path = os.path.join(output_dir, data['imagePath'].replace('.jpg', '.txt')) with open(txt_path, 'w') as f: for obj in objects: f.write(f"{class_id} {x_center} {y_center} {width} {height}\n") # 批量处理 for json_file in os.listdir('json_dir'): json_to_yolo(f'json_dir/{json_file}', 'labels') ``` #### 2. XML → YOLO格式(VOC/PascalVOC示例) ```python import xml.etree.ElementTree as ET def xml_to_yolo(xml_path, class_map): tree = ET.parse(xml_path) root = tree.getroot() size = root.find('size') img_w = float(size.find('width').text) img_h = float(size.find('height').text) with open(xml_path.replace('.xml', '.txt'), 'w') as f: for obj in root.iter('object'): cls = obj.find('name').text bndbox = obj.find('bndbox') # 坐标转换计算... f.write(f"{class_map[cls]} {x_center} {y_center} {w} {h}\n") ``` #### 3. TXT → YOLO格式转换(坐标归一化) 若原始TXT为非归一化坐标: ```python def normalize_coordinates(txt_path, img_width, img_height): with open(txt_path) as f: lines = f.readlines() normalized = [] for line in lines: class_id, x1, y1, x2, y2 = map(float, line.split()) # 转换为归一化中心坐标[^1] x_center = (x1 + x2) / 2 / img_width y_center = (y1 + y2) / 2 / img_height width = (x2 - x1) / img_width height = (y2 - y1) / img_height normalized.append(f"{int(class_id)} {x_center} {y_center} {width} {height}") with open(txt_path, 'w') as f: f.write("\n".join(normalized)) ``` ### 三、创建YAML配置文件 完成标注转换后,创建`dataset.yaml`: ```python import yaml def create_yaml_config(train_path, val_path, class_names): config = { 'train': train_path, 'val': val_path, 'nc': len(class_names), 'names': class_names } with open('dataset.yaml', 'w') as f: yaml.dump(config, f, sort_keys=False) # 使用示例 create_yaml_config( train_path='dataset/train/images', val_path='dataset/val/images', class_names=['cat', 'dog', 'car'] # 与转换后的类别顺序一致 ) ``` ### 四、验证与训练 1. **验证数据集结构**: ``` dataset/ ├── train/ │ ├── images/ # .jpg文件 │ └── labels/ # 对应的.txt标注 └── val/ ├── images/ └── labels/ ``` 2. **启动训练**[^1][^2]: ```python from ultralytics import YOLO model = YOLO('yolov8n.yaml') model.train(data='dataset.yaml', epochs=100) ``` > **关键原则**:YAML文件仅引用图像路径,YOLO会自动在`labels`目录查找同名`.txt`标注文件[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值