letterm commited on
Commit
6bb2412
·
verified ·
1 Parent(s): 4b5d736

Delete .py

Browse files
Files changed (1) hide show
  1. .py +0 -70
.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)