如何在Windows10/11上用Python获取多语言环境下的Downloads文件夹路径?
获取Windows多语言环境下的Downloads文件夹路径
要适配Windows多语言版本的Downloads文件夹路径,不能直接拼接"Downloads"字符串,必须通过系统API获取对应语言的实际路径,以下是几种可靠方案:
方案一:使用pywin32库(需安装)
该方案调用Windows原生Shell API,兼容性好且代码简洁:
- 先安装依赖:
pip install pywin32
- 代码实现:
import win32com.shell.shell as shell # CSIDL_DOWNLOADS 对应系统下载文件夹的标识 downloads_path = shell.SHGetFolderPath(0, shell.CSIDL_DOWNLOADS, None, 0) print(downloads_path)
方案二:使用ctypes(无需额外依赖)
如果不想安装第三方库,可直接用ctypes调用Windows API,无需额外安装包:
import ctypes from ctypes import wintypes # 调用SHGetKnownFolderPath API SHGetKnownFolderPath = ctypes.windll.shell32.SHGetKnownFolderPath SHGetKnownFolderPath.argtypes = [ wintypes.LPCWSTR, wintypes.DWORD, wintypes.HANDLE, ctypes.POINTER(wintypes.LPWSTR) ] # 下载文件夹的唯一标识ID FOLDERID_Downloads = "{374DE290-123F-4565-9164-39C4925E467B}" path_ptr = wintypes.LPWSTR() # 调用API获取路径 result = SHGetKnownFolderPath(FOLDERID_Downloads, 0, None, ctypes.byref(path_ptr)) if result == 0: downloads_path = path_ptr.value # 释放内存 ctypes.windll.kernel32.LocalFree(path_ptr) print(downloads_path) else: raise RuntimeError(f"获取下载文件夹路径失败,错误码: {result}")
为什么硬编码"Downloads"不可行?
Windows的用户文件夹名称会随系统语言本地化,比如波兰语中Downloads对应"Pobrane"、法语对应"Téléchargements",直接拼接固定字符串会导致路径错误,必须通过系统提供的API获取本地化后的实际路径。
内容的提问来源于stack exchange,提问作者SoSaymon
相关产品推荐
相关产品推荐

