我正在使用:
for root, dirs, files in os.walk(rootDir):
浏览目录。一切都很酷。但是,我在Windows 7上运行,当然它具有库抽象。例如,图片库可能会映射到c:\users\me
和c:\users\share
有什么方法可以使用python这个库抽象吗?
答案 0 :(得分:3)
除非我对这个功能的工作方式有误(我实际上并没有在我面前安装Win7),否则你必须访问Windows Shell API才能访问库。
从MSDN杂志阅读Introducing Libraries,很明显只是处理文件系统的应用程序会将库视为一个常规目录,甚至没有任何关于构成图书馆。除非你总是坚持使用花哨的文件选择器对话框来获取所有路径(在这种情况下用户看到库,但总是最终选择一个特定的文件夹,所以你不必处理库),你必须明确使用shell API。
我认为您希望从Windows Libraries开始使用开发指南,并IShellLibrary作为参考。
这些显然是COM API,因此您可能希望使用win32com
从Python访问它们。 (你可以使用ctypes
并处理COM样式的C风格,但你真的不想这样做。)有可能有人已经在一个漂亮的Python界面中包装了这些COM对象 - 我没有在快速PyPI和ActiveState搜索中找到任何内容,但您可能想尝试更严肃的搜索。
或者,当然,您可以使用IronPython并使用.NET API而不是本机API。
答案 1 :(得分:0)
Pywin32(218)的最新版本支持shell库接口:
import pythoncom
from win32com.shell import shell, shellcon
from win32com import storagecon
import os
kfm = pythoncom.CoCreateInstance(shell.CLSID_KnownFolderManager, None,
pythoncom.CLSCTX_INPROC_SERVER, shell.IID_IKnownFolderManager)
libs_folder = kfm.GetFolder(shell.FOLDERID_Libraries)
libs_path = libs_folder.GetPath()
for lib_file in os.listdir(libs_path):
if os.path.splitext(lib_file)[1] == '.library-ms':
print lib_file
i = shell.SHCreateItemFromParsingName(os.path.join(libs_path, lib_file),
None, shell.IID_IShellItem)
lib = pythoncom.CoCreateInstance(shell.CLSID_ShellLibrary, None,
pythoncom.CLSCTX_INPROC, shell.IID_IShellLibrary)
lib.LoadLibraryFromItem(i, storagecon.STGM_READ)
for folder in lib.GetFolders():
print '\t' + folder.GetDisplayName(shellcon.SHGDN_FORPARSING)