for root, dirs, files in os.walk(rootDir):
您瀏覽的目錄。很酷。但是,我在Windows 7上運行,這當然有圖書館抽象。因此,例如圖片庫中可能會映射到c:\users\me
和c:\users\share
有什麼辦法,我可以使用這個庫抽象與Python?
for root, dirs, files in os.walk(rootDir):
您瀏覽的目錄。很酷。但是,我在Windows 7上運行,這當然有圖書館抽象。因此,例如圖片庫中可能會映射到c:\users\me
和c:\users\share
有什麼辦法,我可以使用這個庫抽象與Python?
除非我錯了有關此功能的工作(我實際上沒有在我面前一個Win7的框),你將需要訪問Windows Shell中的API,以訪問庫。
從MSDN雜誌中讀取Introducing Libraries,似乎很清楚,處理文件系統的應用程序會將庫視爲常規目錄,甚至沒有任何指示組成庫的各個分散目錄。除非您始終堅持花哨的文件選擇器對話框來獲取所有路徑(在這種情況下,用戶可以看到庫,但總是選擇一個特定的文件夾,因此您不必處理庫),您必須明確地使用shell API。
我想你想開始Windows Libraries爲開發指南和IShellLibrary供參考。
這些顯然COM API的,所以你可能想使用win32com
從Python的訪問它們。 (你可以使用,處理COM的東西C風格,但你真的不想)。有人可能已經把這些COM對象封裝在一個漂亮的Python接口中 - 我沒有發現任何東西PyPI和ActiveState搜索,但您可能想嘗試更嚴肅的搜索。
或者,當然,你可以使用IronPython和使用.NET的API,而不是那些原生的。
最近Pywin32的版本(218)具有殼庫接口支持:
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)
好,如果你只是在前面的蟒蛇種類它增加一個「R'」; 像文件= R'C:\用戶\我」 – 2013-02-20 20:59:54
如果你能做到'os.listdir()'對庫抽象,你可以用'os.walk()'就可以了。 – 2013-02-20 21:02:47
@BHM:我不認爲'r'是這裏的問題。 – abarnert 2013-02-20 21:02:48