Регулярные выражения Python (регулярные выражения) для подстановочного поиска ключей словаря - PullRequest
0 голосов
/ 08 июня 2019

Я аннотировал некоторые видеокадры аннотатором 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 Ответ

1 голос
/ 08 июня 2019

Вы не можете использовать подстановочные ключи в словаре.Вы вообще заботитесь о ключах - есть ли записи, которые вы хотите игнорировать, или вы счастливы иметь какие-либо / все из них?

Если ключи не важны, тогда возьмите 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']
    ...
...