Python程序实现JSON与Excel文本替换

使用 OpenAI o1 miniOpenAI o1 回答

问题:

写一个python程序,可视化选择一个json文件,再可视化选择一个excel表格,用json的原文搜索,excel表格第二列的每一行,如果有匹配上的,用json原文对应的翻译替换。处理前,需要先将json词典从大到小排序,确保长的文本先替换。程序需要处理大型的json和xlsx文件,请尽可能提高速率,另外根据json词典的总数的进度要写一个进度条,一定要可视化操作程序!

答案:

要实现这个功能,我们可以使用Python的几个库,包括tkinter用于可视化文件选择,pandas用于处理Excel文件,json用于处理JSON文件,以及tqdm用于显示进度条。以下是一个示例程序,展示了如何实现这个功能。

首先,确保你已经安装了所需的库。如果没有安装,可以使用以下命令:

pip install pandas tqdm openpyxl

接下来,下面是完整的Python程序:

import json
import pandas as pd
import tkinter as tk
from tkinter import filedialog
from tqdm import tqdm

def load_json(file_path):
    with open(file_path, 'r', encoding='utf-8') as f:
        return json.load(f)

def load_excel(file_path):
    return pd.read_excel(file_path)

def save_excel(df, file_path):
    df.to_excel(file_path, index=False)

def replace_text_in_excel(json_dict, excel_df):
    # 将json字典按键长度从大到小排序
    sorted_json_dict = dict(sorted(json_dict.items(), key=lambda item: len(item[0]), reverse=True))
    
    # 处理Excel的第二列
    for index, row in tqdm(excel_df.iterrows(), total=excel_df.shape[0], desc="Processing"):
        original_text = row[1]  # 假设第二列是需要替换的文本
        for key, value in sorted_json_dict.items():
            if key in original_text:
                original_text = original_text.replace(key, value)
        excel_df.at[index, excel_df.columns[1]] = original_text  # 更新第二列的值

def main():
    # 创建Tkinter窗口
    root = tk.Tk()
    root.withdraw()  # 隐藏主窗口

    # 选择JSON文件
    json_file_path = filedialog.askopenfilename(title="选择JSON文件", filetypes=[("JSON files", "*.json")])
    if not json_file_path:
        print("未选择JSON文件,程序退出。")
        return

    # 选择Excel文件
    excel_file_path = filedialog.askopenfilename(title="选择Excel文件", filetypes=[("Excel files", "*.xlsx")])
    if not excel_file_path:
        print("未选择Excel文件,程序退出。")
        return

    # 加载数据
    json_dict = load_json(json_file_path)
    excel_df = load_excel(excel_file_path)

    # 替换文本
    replace_text_in_excel(json_dict, excel_df)

    # 保存结果
    output_file_path = filedialog.asksaveasfilename(title="保存结果为", defaultextension=".xlsx", filetypes=[("Excel files", "*.xlsx")])
    if output_file_path:
        save_excel(excel_df, output_file_path)
        print("处理完成,结果已保存。")
    else:
        print("未选择保存路径,程序退出。")

if __name__ == "__main__":
    main()

程序说明:

  1. 文件选择:使用tkinter库创建文件选择对话框,用户可以选择JSON和Excel文件。
  2. 加载数据:使用json库加载JSON文件,使用pandas加载Excel文件。
  3. 文本替换:在Excel的第二列中查找JSON字典中的键,并用对应的值替换。为了确保长文本先替换,先对JSON字典按键长度进行排序。
  4. 进度条:使用tqdm库显示处理进度。
  5. 保存结果:处理完成后,用户可以选择保存结果的路径。

注意事项:

  • 确保Excel文件的第二列是需要替换的文本。
  • 处理大型文件时,程序的性能可能会受到内存和处理速度的影响,建议在处理非常大的文件时进行适当的优化。