我的照片編輯器搞砸了許多照片的標籤。我將此作爲最後一步,開始熟悉Python並編寫腳本來清理標記。我發現pyexiv2可能會非常方便,我試圖基本遵循教程(http://tilloy.net/dev/pyexiv2/tutorial.html)。將修改後的主題數據寫入XMP文件失敗(使用pyexiv2)
我所試圖做的事:
- 解析從XMP文件中的原始數據(注:我直接用附屬文件,而不需要編寫元數據導入的照片文件)。
- 閱讀從Xmp.dc.subject初始標籤(S)(並打印到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。
看來,這個答案是正確的。我檢查了exiv2的文檔(pyexiv2使用了AFAIK),並且寫入XMP文件被列爲「支持」,但是即使直接從命令shell直接使用exiv2,我仍然無法將XMP數據寫入附屬文件。將(同一個xMP)數據寫入JPEG文件可以很好地工作...... –