用Python 3读写Windows "标签"

问题描述 投票:0回答:1

在Windows中,图像文件可以被标记。这些标签可以通过右击文件,点击细节选项卡,然后点击标签属性值单元来查看和编辑。

我希望能够使用Python 3来读取和写入这些标签。

这不是EXIF数据,所以EXIF解决方案将无法工作。我相信这是Windows属性系统的一部分,但我在Dev Center中找不到参考资料。我查看了win32com.propsys,在那里也看不到任何东西。

我以前写过一个程序,曾经这样做过,但后来我把它弄丢了,所以我知道这是有可能的。以前我是在没有pywin32的情况下做到的,但任何解决方案都会很好。我想我用的是windll,但我不记得了。

python-3.x windows winapi pywin32 win32com
1个回答
1
投票

这里有一些示例代码,它是使用的是 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,例如。

© www.soinside.com 2019 - 2024. All rights reserved.