【问题标题】:Is there a way to add attributes/meta-data to files using python?有没有办法使用 python 向文件添加属性/元数据?
【发布时间】:2019-06-21 07:48:26
【问题描述】:

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

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

但是我认为这个解决方案有点老套,而且组织得不好。如果不知何故有人(我)不小心将文件放到错误的文件夹中,在特定情况下它可能会被忽视等(或者我必须将每个字段编码为文件名)。我想到的另一个解决方案是生成 id 作为文件名并保留一个索引文件,将 id(文件名)转换为一组属性。但是,如果我丢失了那个文件,那将是一场灾难。

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

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

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

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

  • 这会影响 OpenCv、Pillow、Matplotlib 等其他库的文件读取吗?