将修改后的主题数据写入XMP文件失败(使用pyexiv2)

时间:2014-01-30 20:28:38

标签: python xmp pyexiv2

我的照片编辑器搞砸了我的很多照片的标签。我把这作为开始熟悉Python并编写脚本来清理标签的最后一步。我发现pyexiv2可能非常方便,我试着基本上按照教程(http://tilloy.net/dev/pyexiv2/tutorial.html)。

我想做什么:

  • 从XMP文件解析原始数据(注意:我使用sidecar文件而不是直接将元数据写入照片文件)。
  • 从Xmp.dc.subject中读取原始标签(并将它们打印到stdout进行调试)
  • 将标记更改为新值(并用于调试打印新值)
  • 将新数据写回XMP文件

在我在编辑器中检查XMP文件之前,事情看起来很不错。更改的值不会显示。但是,XMP文件获取新的时间戳,如果我将XMP文件设置为只读,则会收到错误消息。所以似乎有东西被写入文件。只是没有正确的数据。

这是一个显示我问题的最小脚本:

import pyexiv2

key= 'Xmp.dc.subject'
metadata = pyexiv2.ImageMetadata('test.xmp')
metadata.read()

print metadata[key]
metadata[key] = ['NewTag']
print metadata[key]
metadata.write()

它的输出是:

<Xmp.dc.subject [bag Text] = ['OldTag']>
<Xmp.dc.subject [bag Text] = ['NewTag']>
Script terminated.

但是XMP文件的相关部分仍然如下所示:

<dc:subject>
  <rdf:Bag>
    <rdf:li>OldTag</rdf:li>
  </rdf:Bag>
</dc:subject>

那么为了将更改的元数据写入XMP文件,我该怎么办?

请注意我是Python的完全初学者(但不是编程),所以这个问题可能是因为我不知道的一些微不足道的问题。我在Debian Linux上运行Python 2.7.6。

1 个答案:

答案 0 :(得分:0)

有关pyexiv2.metadata.ImageMetadata的API文档说:

  

图像中嵌入的所有元数据的容器。

     

它提供了使用Python类型操作嵌入在JPEG和TIFF文件等图像文件中的EXIF,IPTC和XMP元数据的便捷方法。它还可以访问图像中嵌入的预览。

看起来可能不支持编写边车文件。