You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含目标检测结果的字符串解析为Python变量?

检测结果字符串转目标变量解决方案

原代码的问题在于直接按空格分割字符串,而检测结果的列表内部包含大量空格,导致分割后无法正确提取完整的检测结果部分。以下是正确的实现代码:

import ast

# 读取日志文件内容
log = open(r'C:\Users\15868\Desktop\python\log.txt', "r")
data = log.readline().strip()  # 去除首尾的换行符和多余空格
log.close()

# 精准分割文件名与检测结果部分:找到第一个空格的位置
split_pos = data.index(' ')
filename = data[:split_pos]
results_str = data[split_pos+1:]

# 将字符串解析为Python列表(ast.literal_eval支持单引号格式的字典,适配性更强)
detections = ast.literal_eval(results_str)

# 批量提取所有检测结果的字段
boxes = [item['box'] for item in detections]
scores = [item['score'] for item in detections]
labels = [item['label'] for item in detections]

# 根据检测结果数量赋值对应变量
if len(detections) == 1:
    box = boxes[0]
    score = scores[0]
    label = labels[0]
else:
    box = boxes
    score = scores
    label = labels

# 验证输出结果
print(f"filename = '{filename}'")
if len(detections) == 1:
    print(f"box = {box}")
    print(f"score = {score}")
    print(f"label = '{label}'")
else:
    print(f"box = {box}")
    print(f"score = {score}")
    print(f"label = {labels}")

代码关键说明

  • 精准分割:通过index(' ')定位第一个空格,避免了检测结果列表内部空格的干扰,确保文件名和结果部分分割准确。
  • 安全解析:ast.literal_eval()可以直接处理带单引号的字典字符串,无需额外替换引号,比json.loads()更适配原数据格式。
  • 分支处理:根据检测结果的数量,自动切换单个值或列表的变量赋值逻辑,完全匹配需求中的两种场景。

测试输出示例

对于多组检测结果的输入字符串,执行后输出:

filename = 'image1'
box = [[35, 0, 112, 36], [71, 80, 149, 149], [0, 81, 80, 149]]
score = [0.8626706004142761, 0.8010843992233276, 0.7892318964004517]
label = ['FACE_F', 'FACE_F', 'FACE_F']

对于单组检测结果的输入(如"image2 [{'box': [10,20,30,40], 'score': 0.95, 'label': 'FACE_F'}]"),输出:

filename = 'image2'
box = [10, 20, 30, 40]
score = 0.95
label = 'FACE_F'

内容的提问来源于stack exchange,提问作者dam1ne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 10:55:22