在Windows中,可以标记图像文件。通过右键单击文件,单击"详细信息"选项卡,然后单击"标记"属性值单元格,可以查看和编辑这些标记。
我希望能够使用Python3读取和编写这些标签。
这不是EXIF数据,因此EXIF解决方案不起作用。我相信它是Windows属性系统的一部分,但我在开发中心找不到参考资料。我查看了win32com.propsys,也看不到里面的任何东西。
我以前写过一个这样的程序,但后来我失去了它,所以我知道这是可能的。以前我在没有pywin32的情况下就这么做了,但任何解决方案都很棒。我想我用的是起锚机,但我记不起来了。
以下是通过propsys
:使用IPropertyStore接口的一些示例代码
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属性来说都是非常通用的。
我使用System.Keywords,因为这与您在属性表中看到的jpeg的"tags"属性相对应。
该代码适用于jpeg和其他格式,用于读取(GetValue
(属性,但并非所有Windows编解码器都支持写入属性(SetValue
(,例如,它不适用于将扩展属性写回.png。