
本文讲解如何使用python的f-String或format方法,将系统当前登录用户名自动插入到文件路径中,解决变量未被正确解析导致文件名显示为字面量{username}的问题。
在python中,若直接在字符串中写入{username}(如 ‘Outputs_{username}.xlsx’),该大括号会被视为普通字符,而非变量占位符——这是因为普通字符串不支持运行时变量插值。只有使用格式化字符串(如f-string、.format() 或 % 格式化)时,变量值才会被实际替换。
✅ 正确做法是使用 f-string(推荐):
在字符串前加 f 前缀,并将变量名置于 {} 中。注意:当路径中含反斜杠 时,建议使用原始字符串(r 前缀)避免转义冲突。二者可结合使用为 rf””:
import getpass username = getpass.getuser() output_excel_file = rf"C:UsersnameOneDriveOutputsOutputs_{username}.xlsx" print(output_excel_file) # 示例输出:C:UsersnameOneDriveOutputsOutputs_tomsmith.xlsx
⚠️ 注意事项:
- 不要混用 r 和 f 的顺序(必须是 rf,而非 fr —— 虽然CPython目前兼容 fr,但 rf 是PEP 498明确推荐的标准写法);
- 若路径中需兼容不同操作系统,建议改用 pathlib 构建路径,提升可移植性:
from pathlib import Path import getpass username = getpass.getuser() base_dir = Path(r"C:UsersnameOneDriveOutputs") output_excel_file = base_dir / f"Outputs_{username}.xlsx"
❌ 错误示例(变量未展开):
output_excel_file = "C:UsersnameOneDriveOutputsOutputs_{username}.xlsx" # {username} 是纯文本 output_excel_file = r"C:UsersnameOneDriveOutputsOutputs_{username}.xlsx" # 同样无效:r-string 禁用所有转义和插值
? 补充:除f-string外,也可使用 .format() 方法(兼容旧版Python):
立即学习“Python免费学习笔记(深入)”;
output_excel_file = "C:\Users\name\OneDrive\Outputs\Outputs_{}.xlsx".format(username)
注意此处需双写反斜杠 \ 以在普通字符串中表示单个 ,而f-string+raw组合(rf””)可避免此繁琐写法。
总结:动态生成带用户名的文件名,核心在于选择支持变量插值的字符串格式化方式,并合理处理windows路径中的反斜杠。f-string + raw 字符串(rf””)是现代Python中最简洁、安全且可读性强的解决方案。