在Windows中,图像文件可以被标记。这些标签可以通过右击文件,点击细节选项卡,然后点击标签属性值单元来查看和编辑。
我希望能够使用Python 3来读取和写入这些标签。
这不是EXIF数据,所以EXIF解决方案将无法工作。我相信这是Windows属性系统的一部分,但我在Dev Center中找不到参考资料。我查看了win32com.propsys,在那里也看不到任何东西。
我以前写过一个程序,曾经这样做过,但后来我把它弄丢了,所以我知道这是有可能的。以前我是在没有pywin32的情况下做到的,但任何解决方案都会很好。我想我用的是windll,但我不记得了。
这里有一些示例代码,它是使用的是 IPropertyStore接口 通过 propsys
:
import pythoncom
from win32com.propsys import propsys
from win32com.shell import shellcon
# get PROPERTYKEY for "System.Keywords"
pk = propsys.PSGetPropertyKeyFromName("System.Keywords")
# get property store for a given shell item (here a file)
ps = propsys.SHGetPropertyStoreFromParsingName("c:\\path\\myfile.jpg", None, shellcon.GPS_READWRITE, propsys.IID_IPropertyStore)
# read & print existing (or not) property value, System.Keywords type is an array of string
keywords = ps.GetValue(pk).GetValue()
print(keywords)
# build an array of string type PROPVARIANT
newValue = propsys.PROPVARIANTType(["hello", "world"], pythoncom.VT_VECTOR | pythoncom.VT_BSTR)
# write property
ps.SetValue(pk, newValue)
ps.Commit()
这段代码对于任何Windows属性都是通用的。
我使用的是 系统.关键词 因为这与你在属性表中看到的jpeg的 "tags "属性相对应。
而且这段代码也适用于jpeg和其他格式的文件。阅读 (GetValue
)属性,但并非所有Windows编解码器都支持属性 写作 (SetValue
),但它不能用于将扩展属性写回.png,例如。