【问题标题】:reduce if - elif-else statements from code python从代码 python 中减少 if - elif-else 语句
【发布时间】:2021-10-04 11:45:26
【问题描述】:

我有以下代码,其中我有太多的 if else 语句。我需要取图像名称并在“-.”上拆分数据,根据长度需要将位置值存储到一个 touple 中并返回它们。有没有办法在没有 if else 语句的情况下实现相同的功能

import re



def parseimage(img):
        

        strip   = img.strip('\n')
        length  = re.split("[_.]+",strip)


        #172.23.60.104_20210909144427527_XX244173_Car_01_unknown_Backward.jpg
        if(len(length)==11 ):

            country     = length[-3]
            vehicletype = length[-5]
            lane        = length[-4]
            numberplate = length[-6]
            timestamp   = length[-7]
            camera      = f"{length[-9]}-{length[-8]}"
            ADRnumber   = "unknown"

            

        #17.23.65.104_20210901082840637_XX83229_01_Car_unknown.jpg
        elif(len(length)==10 ):

            country     = length[-2]
            vehicletype = length[-3]
            lane        = length[-4]
            numberplate = length[-5]
            timestamp   = length[-6]
            camera      = f"{length[-8]}-{length[-7]}"
            ADRnumber   = "unknown" 



        #65-104_20210901082840637_XX83229_01_Car_unknown.jpg

        elif(len(length)==7 ):

            country     = length[-2]
            vehicletype = length[-3]
            camera      = length[-4]
            lane        = length[-5]
            numberplate = length[-6]
            timestamp   = length[-7]
            ADRnumber   = "unknown"


        #/20210922155240420_XX47388_62-101_CHE.jpg
        elif(len(length)==5 and ( re.search("_61-101_",img) or  re.search("_62-101_",img) ) ):

            country     = length[-2]
            camera      = length[-3]
            numberplate = length[-4]
            timestamp   = length[-5]
            lane        = "unknown"
            vehicletype = "unknown"
            ADRnumber   = "unknown"


        elif(len(length)==5):

            country     = length[-2]
            camera      = length[-5]
            numberplate = length[-3]
            timestamp   = length[-4]
            lane        = "unknown"
            vehicletype = "unknown"
            ADRnumber   = "unknown"



        #/20210922155240420_XX47388_62-101_.jpg



        elif(len(length)==4):

            camera      = length[-4]
            numberplate = length[-2]
            timestamp   = length[-3]
            country     = "unknown"
            lane        = "unknown"
            vehicletype = "unknown"
            ADRnumber   = "unknown"


        else:
            pass
            print(img)




        y = (camera,timestamp,numberplate,lane,vehicletype,country,ADRnumber)
return y

【问题讨论】:

  • 你的代码真的有效吗?如果是这样,这是codereview 的问题,而不是 Stackoverflow

标签: python python-re


【解决方案1】:

乍一看,子字符串足够不同,可以使用正则表达式来确定包含什么类型的信息。

  1. 将文件名拆分为子字符串
  2. 使用re 确定子字符串的数据类型(相机、车牌……)
  3. 用值填充数组

Python 正则表达式:

https://docs.python.org/3/library/re.html

【讨论】:

    猜你喜欢
    • 2022-12-31
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多