首页 > 编程语言 >【python基础】eval的使用

【python基础】eval的使用

时间:2023-03-27 18:44:07浏览次数:50  
标签:361.818 python pts 基础 569.6970000000001 eval data append

前言

开发的时候,遇到一个标注的json文件中多边形的框的表示,一时忘记不知道如何解析,此处主要使用eval函数,故记录之。

json文件多边形框的描述

"result": [
            {
                "tagtype": "circle_green",
                "obstructed": false,
                "labelId": 1,
                "data": "[[\"M\",475.7550000000001,362.453],[\"L\",476.69799999999987,383.6790000000001],[\"L\",485.18899999999985,383.2080000000001],[\"L\",484.7170000000001,361.981],[\"Z\"]]"
            },
            {
                "tagtype": "circle_green",
                "obstructed": false,
                "labelId": 2,
                "data": "[[\"M\",561.1320000000001,361.509],[\"L\",562.547,383.2080000000001],[\"L\",570.5659999999998,382.7360000000001],[\"L\",569.623,361.038],[\"Z\"]]"
            }
        ]

其中,

bbox是xywh格式的;
带mlz的是由点组成的线;
是否有z代表是否是闭合图形;
有的是末尾有两个z,和一个z表示的意思一样

解析

def parse_data(data):
    if isinstance(data, str):
        data = eval(data)
    assert isinstance(data, list)
    if isinstance(data[0], list):
        pts = []
        for i, d in enumerate(data):
            if d[0] != 'Z':
                pts.append(d[1:])  # remove 'M'
        if len(pts) == 1:
            return pts[0], 'point'
        if data[-1][0] == 'Z':
            return pts, 'area'
        return pts, 'line'
    else:
        if len(data) == 4:
            return data, 'bbox'  #xywh
        else:
            warnings.warn('3d bbox not supported yet')

具体地

>>> a=eval("[[\"M\",560.9090000000001,361.818],[\"L\",569.6970000000001,361.818],[\"L\",569.6970000000001,383.3330000000001],[\"L\",561.5149999999999,383.9390000000001],[\"Z\"]]")
>>> a[0]
['M', 560.9090000000001, 361.818]
>>> len(a)
5
>>> a[4]
['Z']
>>> b=[]
>>> b.append(a[0][1:])
>>> b.append(a[1][1:])
>>> b
[[560.9090000000001, 361.818], [569.6970000000001, 361.818]]
>>> b.append(a[3][1:])
>>> b.append(a[2][1:])
>>> b
[[560.9090000000001, 361.818], [569.6970000000001, 361.818], [561.5149999999999, 383.9390000000001], [569.6970000000001, 383.3330000000001]]
View Code

 

 

参考

1. Python:eval函数 - 概念、用法、注意事项

标签:361.818,python,pts,基础,569.6970000000001,eval,data,append
From: https://www.cnblogs.com/happyamyhope/p/17262398.html

相关文章

  • #Python基础 利用Pyinstaller 模块对python代码进行打包exe
    一般我们都用 Python 的 Pyinstaller 模块进行打包,这里记录Pyinstaller 模块进行打包。一:安装 Pyinstaller 模块pipinstallPyInstaller二:打开cmd(win+R) ......
  • python环境安装
    一、安装Python环境1、安装包解压后,注意勾选第二个选项 2、cmd验证Python环境输入python后,出现python版本,则代表安装成功 二、安装ide无脑安装vscode---安装汉化包......
  • python 实现 focal loss
    crossentropy的缺点crossentropy的表达式:log(x)与-log(x)的曲线图:   crossentropy的两个缺点:1.数量多的类别会主导损失函数和梯度下降,导致模型更有信心......
  • 《python + opencv实现目标检测》
    1.环境安装1.1安装pythonpython版本是3.10安装Python:首先需要安装Python,可以从官网https://www.python.org/downloads/下载安装包,选择最新版本的Python......
  • Python基本知识(编程语言、数据类型、变量与常量、运算符、格式化输出以及解释器)
    什么是编程语言?编程语言是人类与计算机之间交流的媒介,如Python、go、Java、c语言等等。什么是编程?程序员将自己的逻辑和想法用计算机能够读懂的语言写下来的过程。编程......
  • Python:绘制柱状图时,多个柱子黏在一起
    问题在用df.plot.bar()绘制柱状图时,预想中分开的多列却绘制到了一列中,导致绘制结果出错预期 错误绘制原始数据 我的数据是由date和energy两列构成的,需要绘制时......
  • How to use --extra-index-url in requirements.txt in python?
    [本文出自天外归云的博客园]以下内容来自chatGPT的回答(正解,已验证)问题1:howtouse--extra-index-urlinrequirements.txtinpython?Touse`--extra-index-url`in`......
  • Python魔法方法汇总
    Python中对于一个类来说,有着非常多的魔法方法(以__xxx__方法是进行定义的),这些方法在Python解释器中会被特殊的事件所触发调用。比如比较对象大小,实例对象的创建等很多重......
  • python 实现 average pooling 和 max pooling
    pooling的主要作用1.首要作用:下采样,降维,去除冗余信息。同时扩大感受野,保留了featuremap的特征信息,降低参数量。2.实现非线性,一定程度上避免过拟合。3.可以实现特征......
  • python中的venv文件夹用途和用法
    一Venv文件夹是干嘛的:在pytest中,venv文件夹通常用来存储Python的虚拟环境。虚拟环境是一种隔离Python环境的机制,可以让我们在同一台机器上运行多个Python项目,并......