How do I find the Windows common application data folder using Python?

后端 未结 6 854
谎友^
谎友^ 2020-11-30 05:55

I would like my application to store some data for access by all users. Using Python, how can I find where the data should go?

6条回答
  •  Happy的楠姐
    2020-11-30 06:20

    If you don't want to add a dependency for a third-party module like winpaths, I would recommend using the environment variables already available in Windows:

    • What environment variables are available in Windows?

    Specifically you probably want ALLUSERSPROFILE to get the location of the common user profile folder, which is where the Application Data directory resides.

    e.g.:

    C:\> python -c "import os; print os.environ['ALLUSERSPROFILE']"
    C:\Documents and Settings\All Users
    

    EDIT: Looking at the winpaths module, it's using ctypes so if you wanted to just use the relevant part of the code without installing winpath, you can use this (obviously some error checking omitted for brevity).

    import ctypes
    from ctypes import wintypes, windll
    
    CSIDL_COMMON_APPDATA = 35
    
    _SHGetFolderPath = windll.shell32.SHGetFolderPathW
    _SHGetFolderPath.argtypes = [wintypes.HWND,
                                ctypes.c_int,
                                wintypes.HANDLE,
                                wintypes.DWORD, wintypes.LPCWSTR]
    
    
    path_buf = wintypes.create_unicode_buffer(wintypes.MAX_PATH)
    result = _SHGetFolderPath(0, CSIDL_COMMON_APPDATA, 0, 0, path_buf)
    print path_buf.value
    

    Example run:

    C:\> python get_common_appdata.py
    C:\Documents and Settings\All Users\Application Data
    

提交回复
热议问题