Files
KG_generation/equipment_calculation/test.py
T
chentianrui 9609bb67b4 上传文件
2025-08-01 15:31:56 +08:00

90 lines
3.3 KiB
Python

import json
from bcl_calculator import BCLDataSourceItem
def process_project_data(json_data):
"""
处理 projectData 中的线路特征段数据,计算每条 bpBillZhXsTable 记录的加权值,
并返回一个字典列表,每个字典包含 '特征段' 和对应的 ItemName: 计算结果。
:param json_data: 解析后的 JSON 数据(字典格式)
:return: 字典列表,例如 [{"特征段": "1", "工地运输...": "21.8"}, ...]
"""
result_list = []
# 遍历每个线路特征段
for segment in json_data.get("projectData", {}).get("线路特征段", []):
seg_name = segment.get("Name", "")
# 提取特征段中的数字,例如 "特征段1" -> "1"
seg_number = "".join(filter(str.isdigit, seg_name))
if not seg_number:
seg_number = "0" # 默认值
# 获取 bpBillZhXsTable 列表
table_list = segment.get("bpBillZhXsTable", [])
for item in table_list:
try:
# 提取字段并转换为浮点数
KnapScale = float(item.get("KnapScale", 0))
Knap = float(item.get("Knap", 0))
HillScale = float(item.get("HillScale", 0))
Hill = float(item.get("Hill", 0))
EdelweissScale = float(item.get("EdelweissScale", 0))
edelweiss = float(item.get("edelweiss", 0))
MountainScale = float(item.get("MountainScale", 0))
Mountain = float(item.get("Mountain", 0))
SloughScale = float(item.get("SloughScale", 0))
Slough = float(item.get("Slough", 0))
RiverScale = float(item.get("RiverScale", 0))
River = float(item.get("River", 0))
DesertScale = float(item.get("DesertScale", 0))
Desert = float(item.get("Desert", 0))
# 执行计算
total = (
(KnapScale * Knap)
+ (HillScale * Hill)
+ (EdelweissScale * edelweiss)
+ (MountainScale * Mountain)
+ (SloughScale * Slough)
+ (RiverScale * River)
+ (DesertScale * Desert)
) * 0.01
# 保留一位小数,格式化为字符串
calculated_value = f"{total:.1f}"
# 获取 ItemName
item_name = item.get("ItemName", "未知项目")
# 构建结果字典
item_dict = {"特征段": seg_number, item_name: calculated_value}
# 添加到结果列表
result_list.append(item_dict)
except (ValueError, TypeError) as e:
print(f"数据转换错误,跳过该项: {e}")
continue
return result_list
# ============ 使用示例 ============
# 假设你已经通过 json.loads() 解析了你的 JSON 字符串
import json
# 正确读取 JSON 文件的方式
with open("测试案例/主网预算线路.json", "r", encoding="utf-8") as file:
data = json.load(file)
# 调用函数处理数据
processed_data = process_project_data(data)
# 现在 processed_data 是一个字典列表,你可以用它来创建 BCLDataSourceItem
DXITEM = [BCLDataSourceItem(item) for item in processed_data]
print(processed_data)
print(DXITEM)