Find system folder locations in Python

我是研究僧i 提交于 2019-11-27 05:47:41

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!