Есть ли способ добавить атрибуты / метаданные в файлы с помощью Python? - PullRequest
0 голосов
/ 28 января 2019

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

Текущее решение, которое у меня есть, - это выбрать структуру папок, в которой данные сегментируются до некоторой степени (в папке, которую я уже знаю, эти файлы должны иметь несколько свойств), а затем я кодирую оставшуюся частьинформация в имени файла, разделение полей с помощью "_" и т. д.

Однако я думаю, что это решение немного неуместно и плохо организовано.И если кто-то (я) случайно уронит файл в неправильную папку, в определенных случаях это может остаться незамеченным и т. Д. (Или мне придется кодировать каждое поле в имени файла).Другое решение, о котором я подумал, - генерировать идентификаторы как имена файлов и сохранять индексный файл, переводя идентификатор (имя файла) в набор свойств.Однако, если я потеряю этот файл, это было бы катастрофой.

По этой причине, в частности, я ищу способ добавить метаданные (например, произвольные атрибуты в формате json) в файл без изменения его имени, поэтому имя все равно может быть описанием / идентификатором высокого уровня.Я использую Mac и вижу comments, когда нажимаю информацию о любом имеющемся у меня файле (см. Вложение).Так что, если я могу изменить это поле или сделать что-то подобное (желательно что-то, что будет работать и в Linux), я могу сохранить json как текст и анализировать его всякий раз, когда мне это нужно.

Есть ли простой способ добиться этого с помощью Python?

comments field

Примечание: решение, которое я ищу, не является это ответ, потому что изменение не сохраняется вместе с файлом.

1 Ответ

0 голосов
/ 28 января 2019

Один из способов сделать это - просто записать данные в конец изображения и прочитать их при необходимости:

import re
import json

def add_meta(image, meta):
    with open(image, 'a+b') as f:
        f.write(json.dumps(meta).encode('utf-8'))

def read_meta(image):
    with open(image, 'rb') as f:
        data = str(f.read())
    meta = re.findall(r'xff.*({.*})\'\Z', data)[-1]
    return meta

add_meta('image.jpg', {'Description': 'SO'})
print(read_meta('image.jpg'))

Это дает вам на выходе:

{"Description": "SO"}

Недостатокв этом подходе метаданные не видны в comments разделе изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...