84 lines
2.6 KiB
Python
84 lines
2.6 KiB
Python
import re
|
||
|
||
with open('/root/dns/blocked-services-rules.json', 'r', encoding='utf-8') as f:
|
||
content = f.read()
|
||
|
||
# 从第230行开始,格式有问题
|
||
# 正确的格式应该是:
|
||
# "ServiceName": {
|
||
# "ServiceID": "...",
|
||
# "Name": "...",
|
||
# ...
|
||
# }
|
||
|
||
# 但是现在的格式是:
|
||
# "ServiceID": "shopping",
|
||
# "Amazon Streaming": { "ServiceID": "amazon_streaming",
|
||
# "Name": "Amazon Streaming",
|
||
# ...
|
||
|
||
# 需要删除多余的 "ServiceID": "shopping", 这一行
|
||
# 并修复 "Amazon Streaming": { "ServiceID": "amazon_streaming", 这一行
|
||
|
||
lines = content.split('\n')
|
||
|
||
# 读取前230行(第1-229行,索引0-228)
|
||
fixed_lines = lines[:229]
|
||
|
||
i = 229 # 从第230行开始(索引229)
|
||
while i < len(lines):
|
||
line = lines[i]
|
||
|
||
# 检查是否是多余的 ServiceID 行
|
||
if re.match(r'^\s*"ServiceID":\s*"[^"]+",\s*$', line):
|
||
# 跳过这一行
|
||
print(f"第{i+1}行: 跳过多余的ServiceID行: {line.strip()}")
|
||
i += 1
|
||
continue
|
||
|
||
# 检查是否是格式错误的服务名行
|
||
# 例如: "Amazon Streaming": { "ServiceID": "amazon_streaming",
|
||
match = re.match(r'^\s*"([^"]+)":\s*\{\s*"ServiceID":\s*"([^"]+)",\s*$', line)
|
||
if match:
|
||
service_name = match.group(1)
|
||
service_id = match.group(2)
|
||
# 获取缩进
|
||
indent_match = re.match(r'^(\s*)', line)
|
||
indent = indent_match.group(1) if indent_match else ''
|
||
# 修复这一行
|
||
fixed_line = f'{indent}"{service_name}": {{'
|
||
fixed_lines.append(fixed_line)
|
||
print(f"第{i+1}行: 修复服务 '{service_name}'")
|
||
i += 1
|
||
continue
|
||
|
||
# 检查是否是空字符串键名
|
||
if re.match(r'^\s*"":\s*\{', line):
|
||
# 查找接下来的几行中的 Name 字段
|
||
service_name = None
|
||
for j in range(i + 1, min(i + 10, len(lines))):
|
||
name_match = re.search(r'"Name":\s*"([^"]+)"', lines[j])
|
||
if name_match:
|
||
service_name = name_match.group(1)
|
||
break
|
||
|
||
if service_name:
|
||
# 获取缩进
|
||
indent_match = re.match(r'^(\s*)', line)
|
||
indent = indent_match.group(1) if indent_match else ''
|
||
# 替换空字符串键名为服务名称
|
||
fixed_lines.append(f'{indent}"{service_name}": {{')
|
||
print(f"第{i+1}行: 修复空字符串键名为 '{service_name}'")
|
||
i += 1
|
||
continue
|
||
|
||
fixed_lines.append(line)
|
||
i += 1
|
||
|
||
fixed_content = '\n'.join(fixed_lines)
|
||
|
||
with open('/root/dns/blocked-services-rules.json', 'w', encoding='utf-8') as f:
|
||
f.write(fixed_content)
|
||
|
||
print("修复完成")
|