用于字典键通配符搜索的Python正则表达式(regex)

时间:2019-06-08 11:26:00

标签: python regex filenames glob

我用VGG注释器注释了一些视频帧,这些视频帧以JSON格式为我提供了注释,并希望对其进行解析以提取所需的值(x,y坐标)。
我看过该网站上的其他帖子,但是随着文件名长度的变化,即我的情况似乎与我的情况不符。帧号0到9,然后是10到99、100到999、1000到9999,并增加一位。

我尝试了import glob并使用通配符范围,单个字符和星号。

现在我的代码:

#Edited 
while count < 1200:
    x = data[key]['regions']['0']['shape_attributes']['cx']
    y = data[key]['regions']['0']['shape_attributes']['cy']
    pts = (x, y)
    xy.append(pts)
    count += 1

f = open("coordinates.txt", "w")
f.write(xy)
f.close()  

JSON如下:

        "shape_attributes": {
          "name": "point",
          "cx": 400,
          "cy": 121
        },
        "region_attributes": {}
      }
    }
  },
  "frame48.jpg78647": {
    "fileref": "",
    "size": 78647,
    "filename": "frame48.jpg",
    "base64_img_data": "",
    "file_attributes": {},
    "regions": {
      "0": {
        "shape_attributes": {
          "name": "point",
          "cx": 404,
          "cy": 114
        },
        "region_attributes": {}
      }
    }

编辑:由于不知道如何直接将JSON转换为.txt文件,因此将其解析以获取我的值。

我尝试转换为字符串并按以下方式解析字符串: 这样做的工作是仅将x,y坐标(3位整数)附加到列表中,然后我将其转换为(x,y)的元组列表,并打印到文本文件中,以用作以后的标签神经网络,我可以在电视上跟踪网球比赛中网球的坐标。

xy.append(re.findall(r'\b\d\d\d\b', datatxt))

1 个答案:

答案 0 :(得分:1)

您不能在字典中使用通配符。您实际上是否真正在乎这些键-是否有要忽略的条目,还是很高兴拥有其中的所有键?

如果键不重要,请使用data.values(),这将是字典列表,您可以浏览其中的前1200个条目。

如果某些键不符合您提供的格式,请遍历它们并检查它们是否首先匹配:

for key in data.keys():
    m = re.match('frame(\d+).jpg(\d+)$', key)
    if not m: continue
    f1, f2 = map(int, m.groups())
    if f1<0 or f1>1199 or f2<10000 or f2>99999: continue
    x = data[key]['regions']['0']['shape_attributes']['cx']
    y = data[key]['regions']['0']['shape_attributes']['cy']
    ...