大语言模型LLM的微调中 QA 转换的小工具 xlsx2json.py
在训练语言模型中,需要将文件整理成规范的文档,因为文档本身会有很多不规范的地方,为了训练的正确,将文档进行规范处理。代码的功能是读取一个 Excel 文件,将其数据转换为 JSON 格式,并将 JSON 数据写入到一个文本文件中,实现了从 Excel 数据到 JSON 数据的转换,方便在其他系统或应用中使用或传输数据。
最终要在模型里使用的还是json 格式,以input / output字典格式的输出为例
{
"input": xxx,
"output": xxx
},
逐条解释代码如下:
1. 导入必要的库
import pandas as pd
import os
import json
import pandas as pd
:导入pandas
库,并使用别名pd
。pandas
是一个用于数据处理和分析的强大库,提供了数据结构(如DataFrame
)和数据操作方法,方便处理表格型数据,如 Excel 文件中的数据。import os
:导入os
模块,用于处理文件路径相关的操作,如获取当前文件所在目录、拼接文件路径等。import json
:导入json
模块,用于处理 JSON 数据,包括将 Python 对象转换为 JSON 格式以及将 JSON 数据解析为 Python 对象。
2. 设置工作目录并指定数据集文件路径
work_dir = os.path.dirname(os.path.abspath(__file__))
tmp_data_file = os.path.join(work_dir, "output.xlsx")
work_dir = os.path.dirname(os.path.abspath(__file__))
:获取当前 Python 脚本文件所在的目录路径,并将其赋值给work_dir
变量。os.path.dirname
获取指定路径的目录部分,os.path.abspath
获取绝对路径,__file__
是 Python 内置变量,表示当前脚本文件的路径。tmp_data_file = os.path.join(work_dir, "output.xlsx")
:通过os.path.join
将工作目录和文件名output.xlsx
拼接成完整的 Excel 文件路径,这里假设output.xlsx
在与脚本相同的目录下。如果实际情况不同,需要根据实际情况修改路径。
3. 读取 Excel 文件
df = pd.read_excel(tmp_data_file)
使用pandas
的read_excel
函数读取指定路径(tmp_data_file
)的 Excel 文件,并将其数据加载到一个DataFrame
对象中。DataFrame
是pandas
库中用于处理二维表格数据的主要数据结构,类似于 Excel 中的工作表,可以方便地进行数据选择、过滤、分析等操作。
4. 将 DataFrame 转换为字典列表
data_list = df.to_dict('records')
调用DataFrame
对象的to_dict
方法,将DataFrame
中的每一行数据转换为一个字典,然后将这些字典组成一个列表。参数'records'
表示每行数据作为一个字典,字典的键是列名,值是对应列的值。这样得到的data_list
是一个包含多个字典的列表,每个字典代表 Excel 文件中的一行数据。
5. 将字典列表转换为 JSON 字符串
json_data = json.dumps(data_list, ensure_ascii=False, indent=4)
使用json
模块的dumps
函数将data_list
(字典列表)转换为 JSON 格式的字符串。ensure_ascii=False
参数确保非 ASCII 字符(如中文)能够正确显示,而不是以转义字符的形式出现。indent=4
参数使生成的 JSON 字符串具有缩进,格式更易读,方便查看和调试。
6. 将 JSON 数据写入文件
with open(os.path.join(work_dir, 'json_output.txt'), 'w') as f:
f.write(json_data)
使用with open
语句以写入模式('w'
)打开指定路径(os.path.join(work_dir, 'json_output.txt')
)的文件。在with
语句块内,将 JSON 字符串(json_data
)写入到文件中。with
语句会自动管理文件的打开和关闭,确保在操作完成后正确关闭文件,避免资源泄漏。
excel to json
import pandas as pd
import os
import json
# 设置工作目录
work_dir = os.path.dirname(os.path.abspath(__file__))
# 处理的数据集
tmp_data_file = os.path.join(work_dir, "output.xlsx")
# 读取Excel文件
df = pd.read_excel(tmp_data_file)
# 将DataFrame转换为字典列表
data_list = df.to_dict('records')
# 使用json.dumps函数将字典列表转换为JSON字符串,设置ensure_ascii=False
json_data = json.dumps(data_list, ensure_ascii=False, indent=4)
# 将JSON数据写入文件
with open(os.path.join(work_dir, 'json_output.txt'), 'w') as f:
f.write(json_data)
以下是使用pandas
库将 JSON 数据转换为 Excel 文件的代码示例:
import pandas as pd
import json
import os
# 设置工作目录
work_dir = os.path.dirname(os.path.abspath(__file__))
# JSON文件路径
json_file_path = os.path.join(work_dir, 'json_data.json')
# 读取JSON文件
with open(json_file_path, 'r') as f:
json_data = json.load(f)
# 将JSON数据转换为DataFrame
df = pd.DataFrame(json_data)
# Excel文件输出路径
excel_file_path = os.path.join(work_dir, 'output.xlsx')
# 将DataFrame写入Excel文件
df.to_excel(excel_file_path, index=False)
- 首先设置工作目录,获取当前脚本所在的目录路径。
- 然后指定 JSON 文件的路径,通过
open
函数以只读模式打开 JSON 文件,并使用json.load
函数将 JSON 数据加载为 Python 对象(通常是字典或列表)。 - 接着使用
pandas
的DataFrame
构造函数将 JSON 数据转换为DataFrame
,这是pandas
中用于处理二维表格数据的主要数据结构。 - 再指定输出 Excel 文件的路径。
- 最后使用
DataFrame
的to_excel
方法将数据写入 Excel 文件,index=False
参数表示不将行索引写入 Excel 文件。
sample json_output.txt
[
{
"input": "目前什么事项会有系统邮件或者企信消息通知?",
"output": "[此处未明确提及具体通知事项,需查看文档中的图片,假设图片显示包含合同审批通知、付款通知等]合同审批进度、付款状态等事项会有系统邮件或企信消息通知(具体需根据文档中图片所示内容确定)。"
},
{
"input": "元年商旅订票时身份信息有误,如何修改?",
"output": "行程选择界面,点击出行人“>”按钮编辑证件信息,外籍注意检查护照信息,避免证件信息有误影响乘机。"
},
{
"input": "差旅费哪些发票需要员工线下打印?",
"output": "机票中的电子客运行程单、酒店住宿专票、火车票,线上订票月结统付统一打印发票;使用护照等非身份证订票的火车票、火车退改签票据,须员工线下打印后交回;滴滴用车、餐费、洗衣费等,须员工垫付后开票。"
},
{
"input": "差旅酒店住宿不通过线上预订,如何在差旅事前申请中预估费用?",
"output": "按标准添加行程规划,如选择目的地、入住离店日期、房间数、住宿标准等,系统会自动计算预估费用上限。"
},
{
"input": "跨店同事是否可以合住?",
"output": "为节约费用,可以合住,请线下预定酒店,报销时事由特殊报备。另外,同店员工也是可以合住的,请通过元年预定酒店即可。"
},
{
"input": "老系统已审批完成的差旅事前申请在哪提报销?",
"output": "商旅模块—行程方案—迁移前差旅费报销单。"
},
{
"input": "迁移前差旅费报销单据,如何添加未在事前申请中预估的费用?",
"output": "在预算归属中点击操作下的“⊕”按钮,新增行项目添加费用。老系统事前申请的所有行项目、未在事前申请中预估报销新增的行项目均在同一费用明细行里添加。"
},