Python CLI如何跨Windows/Linux/Mac定位Pictures文件夹保存QRcode图片
跨系统自动定位Pictures文件夹实现方案
你代码里硬编码的$HOME/Pictures仅能在部分Linux/macOS的shell环境下生效,Windows系统无法识别该路径格式,同时也无法适配用户自定义修改过的默认图片目录位置,仅用Python标准库即可实现全系统兼容,无需额外安装第三方依赖。
实现逻辑
- 优先读取各系统官方存储的用户图片目录配置,覆盖用户自定义路径、中文系统目录名等特殊场景
- 配置读取失败时自动回退到各系统通用的
用户主目录/Pictures默认路径 - 自动校验目录存在性,不存在则递归创建,避免文件保存时报错
- 使用官方推荐的跨平台路径模块拼接路径,自动适配不同系统的路径分隔符,杜绝硬编码斜杠/反斜杠的兼容问题
修改后可直接运行的完整代码
from pathlib import Path import os import qrcode def get_pictures_dir() -> Path: # 适配Linux XDG桌面规范,读取用户自定义的图片目录 if os.sys.platform.startswith("linux"): xdg_pic_path = os.environ.get("XDG_PICTURES_DIR") if xdg_pic_path and Path(xdg_pic_path).exists(): return Path(xdg_pic_path) # 适配Windows系统,从注册表读取用户配置的图片目录 if os.name == "nt": import winreg try: reg_key = winreg.OpenKey( winreg.HKEY_CURRENT_USER, r"Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" ) pic_path_val, _ = winreg.QueryValueEx(reg_key, "My Pictures") winreg.CloseKey(reg_key) parsed_path = Path(os.path.expandvars(pic_path_val)) if parsed_path.exists(): return parsed_path except Exception: # 注册表读取失败时走默认路径逻辑 pass # macOS、配置读取失败的Windows/Linux 统一返回主目录下的Pictures默认路径 return Path.home() / "Pictures" if __name__ == "__main__": pic_dir = get_pictures_dir() # 目录不存在则自动创建 pic_dir.mkdir(exist_ok=True, parents=True) save_file = pic_dir / "qrcode_make_python.png" # 原有二维码生成逻辑 data = 'This is an example.' qr = qrcode.QRCode(version=1) qr.add_data(data) img = qr.make_image(fill_color='white', back_color='purple') img.save(save_file) print(f"二维码文件已保存至:{save_file}")
关键注意点
- 路径拼接统一使用
pathlib.Path的/运算符,不需要手动写\或者/,模块会根据当前运行系统自动替换为正确的路径分隔符 - Linux场景优先读取
XDG_PICTURES_DIR环境变量,适配用户修改过默认图片目录的情况,不会硬锁死在~/Pictures - Windows场景通过注册表读取配置,可自动适配中文系统的「图片」默认目录、用户手动将图片目录迁移到其他盘的场景,注册表读取异常时才会回退到默认路径
- 目录创建时加上
exist_ok=True参数,目录已存在时不会抛出异常,兼容重复运行的场景
内容的提问来源于stack exchange,提问作者Wesley Blake
相关产品推荐
相关产品推荐

