64 lines
2.4 KiB
Python
64 lines
2.4 KiB
Python
import os
|
|
import json
|
|
import csv
|
|
|
|
# 设置输入和输出路径
|
|
gt_input_dir = 'gt_input' # JSON 文件所在目录
|
|
csv_file = '人名替换表.csv' # CSV 文件名
|
|
|
|
# 初始化一个字典来存储 JP_Name 和出现次数
|
|
name_count = {}
|
|
|
|
# 遍历 gt_input 目录下的所有 JSON 文件
|
|
for filename in os.listdir(gt_input_dir):
|
|
if filename.endswith('.json'):
|
|
file_path = os.path.join(gt_input_dir, filename)
|
|
with open(file_path, 'r', encoding='utf-8') as f:
|
|
try:
|
|
# 加载 JSON 数据
|
|
data = json.load(f)
|
|
for entry in data:
|
|
jp_name = entry.get("name")
|
|
if jp_name:
|
|
# 更新计数
|
|
name_count[jp_name] = name_count.get(jp_name, 0) + 1
|
|
except json.JSONDecodeError:
|
|
print(f"Error decoding JSON from file: {file_path}")
|
|
|
|
# 检查 CSV 文件是否存在
|
|
existing_data = {}
|
|
if os.path.exists(csv_file):
|
|
# 如果存在,读取现有数据
|
|
with open(csv_file, 'r', encoding='utf-8-sig') as csvfile:
|
|
reader = csv.DictReader(csvfile)
|
|
for row in reader:
|
|
jp_name = row['JP_Name']
|
|
cn_name = row['CN_Name']
|
|
count = int(row['Count'])
|
|
existing_data[jp_name] = {'CN_Name': cn_name, 'Count': count}
|
|
|
|
# 更新现有数据与新数据
|
|
for jp_name in existing_data.keys():
|
|
# 如果该 JP_Name 在新数据中未出现,则 Count 设置为 0
|
|
existing_data[jp_name]['Count'] = name_count.get(jp_name, 0)
|
|
for jp_name, count in name_count.items():
|
|
if jp_name in existing_data:
|
|
# 更新现有项的 Count
|
|
existing_data[jp_name]['Count'] = count
|
|
else:
|
|
# 新增项
|
|
existing_data[jp_name] = {'CN_Name': '', 'Count': count} # CN_Name 默认为空
|
|
|
|
# 将结果写入 CSV 文件
|
|
with open(csv_file, 'w', newline='', encoding='utf-8-sig') as csvfile:
|
|
fieldnames = ['JP_Name', 'CN_Name', 'Count']
|
|
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
|
|
|
|
writer.writeheader()
|
|
|
|
# 按 Count 排序并写入
|
|
sorted_data = sorted(existing_data.items(), key=lambda x: x[1]['Count'], reverse=True)
|
|
for jp_name, details in sorted_data:
|
|
writer.writerow({'JP_Name': jp_name, 'CN_Name': details['CN_Name'], 'Count': details['Count']})
|
|
|
|
print(f"CSV 文件 '{csv_file}' 已成功生成/更新。") |