#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']}