问题
I am trying to find out the location of system folders with Python 3.1. For example "My Documents" = "C:\Documents and Settings\User\My Documents", "Program Files" = "C:\Program Files" etc etc.
回答1:
I found a slightly different way of doing it. This way will give you the location of various system folders and uses real words instead of CLSIDs.
import win32com.client
objShell = win32com.client.Dispatch("WScript.Shell")
allUserDocs = objShell.SpecialFolders("AllUsersDesktop")
print allUserDocs
Other available folders: AllUsersDesktop, AllUsersStartMenu, AllUsersPrograms, AllUsersStartup, Desktop, Favorites, Fonts, MyDocuments, NetHood, PrintHood, Recent, SendTo, StartMenu, Startup & Templates
回答2:
In Windows 7 I can use the following environment variables to access the folders I need:
>>> import os
>>> os.environ['USERPROFILE']
'C:\\Users\\digginc'
>>> os.environ['PROGRAMFILES']
'C:\\Program Files'
回答3:
To get the "My Documents" folder, you can use:
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
From here.
I'm not sure what the equivalent magic incantation is for "Program Files", but that should hopefully be enough to get you started.
回答4:
The Windows API call for doing this, from Vista on, is SHGetKnownFolderPath. There is an MIT-licensed wrapper (using ctypes, so no dependencies on pywin32) here.
>>> from knownpaths import *
>>> get_path(FOLDERID.ProgramFilesX86)
u'C:\\Program Files (x86)'
回答5:
Here's an alternative win32com approach because WScript.Shell
"special folders do not work in all language locales, a preferred method is to query the value from User Shell folders" (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'
The ID number comes from MSDN ShellSpecialFolderConstants Enumeration. I converted that list to csv for easy use and wrote a short python script demoing that, gist here.
Special thanks to Mr Chimp for starting this off. I relied heavily on his answer and references to get started.
来源:https://stackoverflow.com/questions/2063508/find-system-folder-locations-in-python