Find system folder locations in Python

后端 未结 5 838
鱼传尺愫
鱼传尺愫 2020-12-09 06:08

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\"

相关标签:
5条回答
  • 2020-12-09 06:23

    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)'
    
    0 讨论(0)
  • 2020-12-09 06:27

    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

    0 讨论(0)
  • 2020-12-09 06:29

    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.

    0 讨论(0)
  • 2020-12-09 06:41

    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.

    0 讨论(0)
  • 2020-12-09 06:47

    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'
    
    0 讨论(0)
提交回复
热议问题