项目说明
项目名称
羲和数据集清洗器003
项目描述
这是一个基于 Python 的图形用户界面 (GUI) 应用程序,用于检查和修复 .jsonl 文件中的数据格式错误。该工具可以自动修复常见的 JSON 格式错误,并将数据转换为规定的格式。它还提供日志记录功能,记录检查过程中发现的错误信息。
功能特点
选择输入文件:用户可以选择一个 .jsonl 文件进行检查。
选择输出文件:用户可以选择一个输出文件来保存修复后的有效数据(可选)。
检查文件:程序会读取输入文件的每一行,验证其是否符合预定义的 JSON 格式,并将结果记录到日志文件中。
修复 JSON 格式错误:自动修复常见的 JSON 格式错误,如引号、括号、多余的逗号等。
数据格式转换:将数据从其他格式(如 {“question”: “11111”, “answer”: “22222”})转换为规定的格式 {“question”: “11111”, “xihe_answers”: [“22222”], “ling_answers”: [“22222”]}。
日志记录:记录检查过程中的所有错误信息到日志文件中。
用户提示:通过弹窗通知用户检查结果。
技术栈
Python 3.x
Tkinter:用于创建图形用户界面
re:用于正则表达式匹配和替换
json:用于解析和生成 JSON 数据
目录结构
code
jsonl_checker/
│
├── main.py # 主程序文件
├── README.md # 项目说明文档
└── error_log.txt # 默认的日志文件
使用说明
安装依赖:
本项目使用标准库中的模块,无需额外安装依赖。
运行程序:
打开终端或命令行工具。
导航到项目目录。
运行以下命令启动程序:
sh
python main.py
操作步骤:
选择输入文件:
点击“选择 JSONL 文件”按钮,选择要检查的 .jsonl 文件。
选择输出文件(可选):
点击“选择输出文件”按钮,选择一个输出文件来保存修复后的有效数据。
检查文件:
点击“检查文件”按钮,程序将开始检查文件。
查看结果:
检查完成后,程序会通过弹窗通知用户检查结果,并将日志信息保存到 error_log.txt 文件中。
代码详解
fix_json_line(line) 函数:
尝试直接解析 JSON。
如果解析失败,尝试修复常见的 JSON 格式错误,如引号、括号、多余的逗号等。
返回修复后的 JSON 对象,如果无法修复则返回 None。
convert_data_format(data) 函数:
将 {“question”: “11111”, “answer”: “22222”} 转换为 {“question”: “11111”, “xihe_answers”: [“22222”], “ling_answers”: [“22222”]}。
返回转换后的数据。
convert_and_check_jsonl_file(input_file, log_file, output_file=None) 函数:
读取输入文件的每一行。
使用 fix_json_line 函数修复 JSON 格式错误。
使用 convert_data_format 函数转换数据格式。
检查 JSON 对象是否符合要求,并记录错误信息到日志文件。
将有效的行保存到输出文件中。
select_file() 函数:
打开文件选择对话框,让用户选择一个 .jsonl 文件,并将路径显示在输入框中。
select_output_file() 函数:
打开文件保存对话框,让用户选择或创建一个输出文件,并将路径显示在输入框中。
run_check() 函数:
获取用户选择的输入文件和输出文件路径。
调用 convert_and_check_jsonl_file 函数进行文件检查。
如果没有选择输入文件,弹出警告信息。
示例用法
假设你有一个名为 data.jsonl 的文件,内容如下:
jsonl
{
"question": "11111", "answer": "22222"}
{
"question": "What is the capital of France?", "xihe_answers": ["Paris"], "ling_answers": ["Paris"]}
{
"question": "What is 2 + 2?", "xihe_answers": ["4"], "ling_answers": [4]} // 错误:ling_answers 应该是字符串列表
{
"question": "What is the largest planet in our solar system?", "xihe_answers": ["Jupiter"], "ling_answers": ["Jupiter"]}
{
"question": "What is the capital of France?", xihe_answers: ["Paris"