Spaces:
Sleeping
Sleeping
Delete .py
Browse files
.py
DELETED
|
@@ -1,70 +0,0 @@
|
|
| 1 |
-
import os
|
| 2 |
-
import json
|
| 3 |
-
import argparse
|
| 4 |
-
|
| 5 |
-
def extract_pairs(obj):
|
| 6 |
-
"""
|
| 7 |
-
递归提取 obj 中所有键值对(仅当键和值均为字符串时)。
|
| 8 |
-
返回一个字典,包含所有提取到的键值对。
|
| 9 |
-
"""
|
| 10 |
-
pairs = {}
|
| 11 |
-
if isinstance(obj, dict):
|
| 12 |
-
for key, value in obj.items():
|
| 13 |
-
# 如果键和值均为字符串,则记录该对
|
| 14 |
-
if isinstance(key, str) and isinstance(value, str):
|
| 15 |
-
if key in pairs and pairs[key] != value:
|
| 16 |
-
print(f"警告:键 '{key}' 重复,但值不同:'{pairs[key]}' 与 '{value}'。保留首次出现的值。")
|
| 17 |
-
else:
|
| 18 |
-
pairs[key] = value
|
| 19 |
-
# 无论 value 是否为字符串,都递归检查其内部结构
|
| 20 |
-
sub_pairs = extract_pairs(value)
|
| 21 |
-
for sub_key, sub_value in sub_pairs.items():
|
| 22 |
-
if sub_key in pairs and pairs[sub_key] != sub_value:
|
| 23 |
-
print(f"警告:键 '{sub_key}' 重复,但值不同:'{pairs[sub_key]}' 与 '{sub_value}'。保留首次出现的值。")
|
| 24 |
-
else:
|
| 25 |
-
pairs[sub_key] = sub_value
|
| 26 |
-
elif isinstance(obj, list):
|
| 27 |
-
for item in obj:
|
| 28 |
-
sub_pairs = extract_pairs(item)
|
| 29 |
-
for sub_key, sub_value in sub_pairs.items():
|
| 30 |
-
if sub_key in pairs and pairs[sub_key] != sub_value:
|
| 31 |
-
print(f"警告:键 '{sub_key}' 重复,但值不同:'{pairs[sub_key]}' 与 '{sub_value}'。保留首次出现的值。")
|
| 32 |
-
else:
|
| 33 |
-
pairs[sub_key] = sub_value
|
| 34 |
-
return pairs
|
| 35 |
-
|
| 36 |
-
def merge_json_pairs(directory, output_file):
|
| 37 |
-
"""
|
| 38 |
-
遍历指定目录下所有 JSON 文件,
|
| 39 |
-
提取每个文件中所有层级的键值对(仅当键和值均为字符串时),
|
| 40 |
-
并将它们合并到一个平面字典中,最后写入 output_file。
|
| 41 |
-
"""
|
| 42 |
-
merged_pairs = {}
|
| 43 |
-
|
| 44 |
-
for filename in os.listdir(directory):
|
| 45 |
-
if filename.endswith(".json"):
|
| 46 |
-
file_path = os.path.join(directory, filename)
|
| 47 |
-
try:
|
| 48 |
-
with open(file_path, "r", encoding="utf-8") as f:
|
| 49 |
-
data = json.load(f)
|
| 50 |
-
file_pairs = extract_pairs(data)
|
| 51 |
-
for key, value in file_pairs.items():
|
| 52 |
-
if key in merged_pairs and merged_pairs[key] != value:
|
| 53 |
-
print(f"警告:文件 '{filename}' 中键 '{key}' 的值 '{value}' 与之前值 '{merged_pairs[key]}' 不同,保留首次出现的值。")
|
| 54 |
-
else:
|
| 55 |
-
merged_pairs[key] = value
|
| 56 |
-
except Exception as e:
|
| 57 |
-
print(f"读取文件 '{filename}' 时发生错误:{e}")
|
| 58 |
-
|
| 59 |
-
try:
|
| 60 |
-
with open(output_file, "w", encoding="utf-8") as out_f:
|
| 61 |
-
json.dump(merged_pairs, out_f, ensure_ascii=False, indent=4)
|
| 62 |
-
print(f"合并后的键值对已写入:{output_file}")
|
| 63 |
-
except Exception as e:
|
| 64 |
-
print(f"写入输出文件 '{output_file}' 时发生错误:{e}")
|
| 65 |
-
|
| 66 |
-
if __name__ == '__main__':
|
| 67 |
-
directory = 'public\TagJson'
|
| 68 |
-
output_file = 'TagJson.json'
|
| 69 |
-
|
| 70 |
-
merge_json_pairs(directory, output_file)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|