我正在尝试使用 Python 3.1 找出系统文件夹的位置。例如“我的文档”=“C:\Documents and Settings\User\My Documents”、“Program Files”=“C:\Program Files”等。
5 回答
我发现了一种稍微不同的方法。这种方式将为您提供各种系统文件夹的位置,并使用真实的单词而不是 CLSID。
import win32com.client
objShell = win32com.client.Dispatch("WScript.Shell")
allUserDocs = objShell.SpecialFolders("AllUsersDesktop")
print allUserDocs
其他可用文件夹:AllUsersDesktop、AllUsersStartMenu、AllUsersPrograms、AllUsersStartup、Desktop、Favorites、Fonts、MyDocuments、NetHood、PrintHood、Recent、SendTo、StartMenu、Startup & Templates
在 Windows 7 中,我可以使用以下环境变量来访问我需要的文件夹:
>>> import os
>>> os.environ['USERPROFILE']
'C:\\Users\\digginc'
>>> os.environ['PROGRAMFILES']
'C:\\Program Files'
要获取“我的文档”文件夹,您可以使用:
from win32com.shell import shell
df = shell.SHGetDesktopFolder()
pidl = df.ParseDisplayName(0, None,
"::{450d8fba-ad25-11d0-98a8-0800361b1103}")[1]
mydocs = shell.SHGetPathFromIDList(pidl)
print mydocs
从这里。
我不确定“程序文件”的等效魔法咒语是什么,但这应该足以让你开始。
从 Vista 开始,执行此操作的 Windows API 调用是SHGetKnownFolderPath。这里有一个 MIT 许可的包装器(使用 ctypes,因此不依赖于 pywin32)。
>>> from knownpaths import *
>>> get_path(FOLDERID.ProgramFilesX86)
u'C:\\Program Files (x86)'
这是另一种 win32com 方法,因为WScript.Shell
“特殊文件夹不适用于所有语言环境,首选方法是从 User Shell 文件夹中查询值”(ref):
>>> ID = 48
>>> shapp = win32com.client.Dispatch("Shell.Application")
>>> shapp.namespace(ID).self.path
'C:\\Users\\mattw\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Administrative Tools'
ID 号来自 MSDN ShellSpecialFolderConstants Enumeration。我将该列表转换为 csv 以便于使用,并编写了一个简短的 python 脚本来演示,gist here。
特别感谢黑猩猩先生开始这件事。我非常依赖他的回答和参考资料来开始。