当前位置:  开发笔记 > 编程语言 > 正文

如何使用Python找到Windows常用应用程序数据文件夹?

如何解决《如何使用Python找到Windows常用应用程序数据文件夹?》经验,为你挑选了3个好方法。

我希望我的应用程序存储一些数据供所有用户访问.使用Python,我如何找到数据的去向?



1> Jay..:

如果您不想为winpaths等第三方模块添加依赖项,我建议使用Windows中已有的环境变量:

Windows中可用的环境变量是什么?

具体而言,您可能希望ALLUSERSPROFILE获取公共用户配置文件文件夹的位置,该文​​件夹位于Application Data目录所在的位置.

例如:

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

编辑:看看winpaths模块,它使用ctypes,所以如果你只想使用代码的相关部分而不安装winpath,你可以使用它(显然为了简洁省略了一些错误检查).

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

示例运行:

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


使用`ctypes.create_unicode_buffer`,它在PY2和PY3中都有效.由于使用了"from ctypes import*",它只是偶然出现在PY2中的`wintypes`中.

2> 小智..:

来自http://snipplr.com/view.php?codeview&id=7354

homedir = os.path.expanduser('~')

# ...works on at least windows and linux. 
# In windows it points to the user's folder 
#  (the one directly under Documents and Settings, not My Documents)


# In windows, you can choose to care about local versus roaming profiles.
# You can fetch the current user's through PyWin32.
#
# For example, to ask for the roaming 'Application Data' directory:
#  (CSIDL_APPDATA asks for the roaming, CSIDL_LOCAL_APPDATA for the local one)
#  (See microsoft references for further CSIDL constants)
try:
    from win32com.shell import shellcon, shell            
    homedir = shell.SHGetFolderPath(0, shellcon.CSIDL_APPDATA, 0, 0)

except ImportError: # quick semi-nasty fallback for non-windows/win32com case
    homedir = os.path.expanduser("~")

要获取所有用户的app-data目录,而不是当前用户,只需使用shellcon.CSIDL_COMMON_APPDATA而不是shellcon.CSIDL_APPDATA.



3> Robert S...:

看看http://ginstrom.com/code/winpaths.html.这是一个简单的模块,可以检索Windows文件夹信息.该模块实现get_common_appdata为所有用户获取App Data文件夹.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有