有没有一种方法可以使用python向文件添加属性/元数据?

时间:2019-01-28 10:17:49

标签: python python-3.x macos file operating-system

我从事的项目通常最终会在不同的上下文中生成大量数据,因此我必须以某种方式组织一切。

我目前的解决方案是确定一个文件夹结构,该结构将数据细分为一定程度(在一个文件夹中,我已经知道这些文件应该共享少量属性),然后将其余信息编码到文件名,用“ _”等分隔字段。

但是,我认为此解决方案有点笨拙,而且组织不佳。而且,如果某人(我)不小心将文件放到了错误的文件夹中,则在特定情况下它可能会不被注意等。(或者我必须将每个字段编码为文件名)。我想到的另一种解决方案是生成ID作为文件名,并保留将ID(文件名)转换为属性集的索引文件。但是,如果我丢失了该文件,那将是一场灾难。

出于这个原因,具体地说,我正在寻找一种在不更改文件名的情况下将元数据(例如json格式的任意属性)添加到文件的方法,因此名称仍可以是高级描述/标识。我使用mac并在我拥有的任何文件上单击信息时看到comments(请参阅附件)。因此,如果我可以修改该字段或做类似的事情(最好也可以在linux中工作),则可以将json保存为文本,并在需要时进行解析。

有没有一种简单的方法可以使用python来实现?

comments field

注意:我正在寻找的解决方案不是this答案,因为更改没有与文件一起保存。

1 个答案:

答案 0 :(得分:0)

一种方法是简单地将数据写到图像的末尾,并在需要时读取它:

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部分中不可见。