61 lines
1.8 KiB
Python
61 lines
1.8 KiB
Python
import json
|
||
|
||
def txt_to_json(input_file, output_file):
|
||
# 获取用户输入的range范围
|
||
range_input = input("请输入评分范围(格式:最小值,最大值,例如1,5): ")
|
||
range_values = list(map(int, range_input.split(',')))
|
||
|
||
# 读取并分割问题和指令
|
||
with open(input_file, 'r', encoding='utf-8') as f:
|
||
all_lines = [line.strip() for line in f if line.strip()]
|
||
|
||
# 分割问题定义和subscale指令
|
||
if '--' in all_lines:
|
||
split_index = all_lines.index('--')
|
||
question_lines = all_lines[:split_index]
|
||
subscale_lines = all_lines[split_index+1:]
|
||
else:
|
||
question_lines = all_lines
|
||
subscale_lines = []
|
||
|
||
# 解析subscale指令
|
||
subscale_map = {}
|
||
for line in subscale_lines:
|
||
if '=' in line:
|
||
name, ids = line.split('=', 1)
|
||
for q_id in ids.split(','):
|
||
subscale_map[q_id.strip()] = name.strip()
|
||
|
||
questions = []
|
||
for idx, line in enumerate(question_lines, 1):
|
||
# 处理前导"-"标记
|
||
reverse = 1 if line.startswith('-') else None
|
||
text = line[1:] if reverse else line
|
||
|
||
question = {
|
||
"id": str(idx),
|
||
"subscale": subscale_map.get(str(idx), ""), # 新增subscale映射
|
||
"text": text,
|
||
"range": range_values.copy()
|
||
}
|
||
|
||
if reverse:
|
||
question["reverse"] = 1
|
||
|
||
questions.append(question)
|
||
|
||
# 构建完整JSON结构
|
||
result = {
|
||
"title": "",
|
||
"description": "",
|
||
"instructions": "",
|
||
"questions": questions
|
||
}
|
||
|
||
# 写入输出文件
|
||
with open(output_file, 'w', encoding='utf-8') as f:
|
||
json.dump(result, f, ensure_ascii=False, indent=4)
|
||
|
||
if __name__ == "__main__":
|
||
txt_to_json("input.txt", "output.json")
|