преобразуйте текст в json с помощью этого формата

#python #json #file

Вопрос:

Мне нужно преобразовать текстовый файл в JSON в этом формате

 'annotations': [{u'image_id': 0, u'caption': u'the man is playing a guitar'},
                    {u'image_id': 0, u'caption': u'a man is playing a guitar'},
                    {u'image_id': 1, u'caption': u'a woman is slicing cucumbers'},
                    {u'image_id': 1, u'caption': u'the woman is slicing cucumbers'},
                    {u'image_id': 1, u'caption': u'a woman is cutting cucumbers'}]
    }
 

текстовый файл в виде

    image_id 42 caption man is sitting on bench with his head
   image_id 73 caption man is riding motorcycle on the street
   image_id 74 caption cat laying on top of bed next to window
 

код такой

 import json
images = []
with open('1.txt') as f:
    for line in f:
        _, image_id, _, caption = line.split(maxsplit=3)
        images.append({"image_id": int(image_id), "caption": caption})

 with open('r.json', "w") as f:
    json.dump(images, f)
 

но попал в файл результатов

 [{"image_id": 42, "caption": "man is holding an umbrella in the rainn"}, {"image_id": 73, "caption": "black and white cat sitting on top of carn"},....] 
 

как проблема, когда я попытался прочитать файл результатов

 imgToAnnsRES = {ann['image_id']: [] for ann in datasetRES['annotations']}
TypeError: list indices must be integers or slices, not str
 

Комментарии:

1. должен images ли быть список первого упомянутого формата JSON? есть ли пример нескольких аннотаций? а как насчет нескольких изображений?

2. пожалуйста, смотрите сообщение об изменении

3. вы должны включить часть своего текстового файла, потому что сейчас он не соответствует

4. В чем проблема с вашим текущим выходом ? n в конце подписи?

5. где ты это взял?

Ответ №1:

Предполагая, что вы получили начальный диктант:

 images = [{u'image_id': 0, u'caption': u'the man is playing a guitar'},
                    {u'image_id': 1, u'caption': u'a man is playing a guitar'},
                    {u'image_id': 2, u'caption': u'a woman is slicing cucumbers'},
                    {u'image_id': 3, u'caption': u'the woman is slicing cucumbers'},
                    {u'image_id': 4, u'caption': u'a woman is cutting cucumbers'}]
 

Мы можем просто определить datasetRES объект как :

 datasetRES = {'annotations': images}
 

Теперь вы можете использовать следующий код:

 imgToAnnsRES = {ann['image_id']: [] for ann in datasetRES['annotations']}