我的照片编辑器搞砸了我许多照片的标签。我将此作为开始熟悉 Python 并编写脚本来清理标签的最后一击。我发现 pyexiv2 可能会派上用场,我尝试基本上遵循教程(http://tilloy.net/dev/pyexiv2/tutorial.html)。
我正在尝试做的事情:
- 从 XMP 文件中解析原始数据(注意:我使用 sidecar 文件而不是直接将元数据写入照片文件)。
- 从 Xmp.dc.subject 中读取原始标签(并将它们打印到标准输出以进行调试)
- 将标签更改为新值(并用于调试打印新值)
- 将新数据写回 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。