views:

240

answers:

2

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.

+4  A: 

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.

Dominic Rodger
In Python <3, yeah. In Python 3.1:>>> from win32com.shell import shellTraceback (most recent call last): File "<pyshell#0>", line 1, in <module> from win32com.shell import shellImportError: No module named win32com.shell
Mr_Chimp
Is win32com installed? There are versions available for Python 3.1 (see http://sourceforge.net/projects/pywin32/files/)
Dominic Rodger
[Edit] that works great, thanks!
Mr_Chimp
+3  A: 

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

Mr_Chimp
+1 - that's a much better way to do it than mine!
Dominic Rodger