我正在尝试使用Python 3.1查找系统文件夹的位置。例如,"我的文档" = "C:\Documents and Settings\User\My Documents","程序文件" = "C:\Program Files"等等。
我正在尝试使用Python 3.1查找系统文件夹的位置。例如,"我的文档" = "C:\Documents and Settings\User\My Documents","程序文件" = "C:\Program Files"等等。
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(模板)。
>>> import os
>>> os.environ['USERPROFILE']
'C:\\Users\\digginc'
>>> os.environ['PROGRAMFILES']
'C:\\Program Files'
要获取"My Documents"文件夹,您可以使用以下代码:
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
来源在这里.
我不确定“Program Files”等价的魔法咒语是什么,但这应该足以让您开始了。
- Mr_Chimpfrom win32com.shell import shell Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> from win32com.shell import shell ImportError: 没有名为win32com.shell的模块
从Vista开始,用于此操作的Windows API调用是SHGetKnownFolderPath。这里有一个使用ctypes编写的MIT许可包装器(因此不依赖于pywin32)此处。
>>> from knownpaths import *
>>> get_path(FOLDERID.ProgramFilesX86)
u'C:\\Program Files (x86)'
这里有一个替代性的 win32com 方法,因为WScript.Shell
“特殊文件夹并不适用于所有语言环境,首选的方法是从用户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枚举。我将该列表转换为CSV以便于使用,并编写了一个简短的Python脚本进行演示,代码片段在此。
特别感谢Chimp先生的启动。我在开始时非常依赖他的答案和参考资料。
objShell
,看看是否有一种方法可以查看所有SpecialFolder
名称? - Mr_Chimp