Python 3.15 os.path.isreserved 怎么判断 Windows 保留路径
如果程序要把用户输入保存到 Windows、生成 ZIP 条目,或把文件同步到 Windows 主机,创建前应先检查名称是否属于 Windows 保留路径。Python 3.15 推荐使用 os.path.isreserved(path):返回 True 只表示这个路径名触碰了当前系统认识的保留规则,并不表示文件已经存在。若程序运行在 Linux 或 macOS、但目标格式是 Windows,应改用 ntpath.isreserved(),不要让宿主机的 os.path 替你决定目标规则。
isreserved()是创建前的词法判断,不负责检查存在性、权限或目录边界。- Windows 的典型保留情况包括
CON、NUL、COM1、尾随空格或点、冒号流以及通配符。 - 跨平台生成 Windows 路径时用
ntpath.isreserved,通过后仍要处理规范化、权限和实际 I/O 异常。
os.path.isreserved 到底判断什么
os.path.isreserved() 判断的是路径命名规则。Python 3.15 文档把 Windows 上的保留情况归纳为几组:名称末尾是空格或点,包含冒号(例如文件流语法),包含通配符、管道或 ASCII 控制字符,以及 DOS 设备名。CON、NUL、PRN、AUX、COM1 和 LPT1 都应当视为高风险名称;扩展名不会自动让设备名安全,例如 CON.txt 也不适合直接作为普通文件名。
这个 API 不访问磁盘,也不判断路径是否存在。它更像“提交给文件系统前的命名闸门”:适合在拼接输出路径、写入归档条目或接受上传文件名时尽早返回明确错误。官方同时提醒,这是一套对多数 Windows 系统规则的近似,规则可能随 Windows 版本变化,所以不要把它当成永远不变的完整规范。
| 输入特征 | 为什么要拦截 | 常见处理 |
|---|---|---|
CON、NUL、COM1 | DOS 设备名可能被系统解释为设备 | 拒绝或改名 |
report.txt 、cache. | 尾随空格和点属于保留规则 | 去除并重新确认冲突 |
name:stream | 冒号可能表示文件流 | 替换为安全分隔符 |
part?.txt、控制字符 | 会触碰通配或控制字符规则 | 拒绝原名并提示原因 |

在 Python 3.15 中怎样检查用户输入
应用层通常不需要自己维护一份设备名黑名单。把原始输入交给 os.path.isreserved(),再把判断结果转换成用户能理解的错误即可。保留原始字符串很重要:清洗后的结果可以用于建议新名称,但不能悄悄覆盖用户输入。
import os
def ensure_windows_name(path_text: str) -> str:
# 先拒绝 Windows 规则明确不接受的名称,保留原文用于提示。
if os.path.isreserved(path_text):
raise ValueError(f"Windows 文件名不可用:{path_text!r}")
# 这里只返回候选名;真正写入时仍要捕获 OSError。
return path_text
这里的判断是“可命名性”检查,不等于路径安全检查。若输入来自用户,还要根据业务目录调用 normpath() 或 commonpath() 检查是否越出允许根目录;若要创建文件,则仍需处理权限不足、父目录不存在、文件已存在和网络盘异常。
跨平台生成 Windows 路径时怎么写
os.path 会选择当前 Python 运行平台适用的路径模块。Linux 上它是 posixpath,macOS 上也按 POSIX 规则工作;即使字符串里写着 C:\\,也不会因此变成 Windows 路径判断。需要生成 Windows 归档名或同步清单时,应显式选择 ntpath。
import ntpath
def check_windows_target_name(name: str) -> None:
# 目标是 Windows 格式,所以固定使用 ntpath 的规则。
if ntpath.isreserved(name):
raise ValueError(f"Windows 目标名不可用:{name!r}")
# 通过词法判断后,交给后续代码拼接目标目录并执行 I/O。
这种写法适合 Linux 构建机生成 Windows 安装包、跨平台备份工具生成 Windows 清单,或服务端先筛选客户端上传名。判断器应绑定“目标路径格式”,而不是绑定“当前运行机器”。

通过 isreserved 后还要检查什么
通过返回值只说明名称没有触碰这组保留规则。生产代码至少保留下面这张清单:
- 格式边界:确认分隔符、盘符、UNC 前缀和相对路径语义符合目标系统。
- 目录边界:把规范化后的候选路径限制在允许根目录内,不能只检查最后一个文件名。
- 资源状态:创建或重命名时捕获
OSError,处理权限、并发冲突、父目录和网络存储错误。 - 兼容版本:Python 3.15 的变更说明已移除
PurePath.is_reserved(),新代码应使用os.path.isreserved();部署到旧解释器前先确认 API 可用性。
换句话说,isreserved() 解决的是“这个名字是否明显违反 Windows 命名规则”,不是“这个路径是否可以安全写入”。把它放在命名入口,再把规范化和真实 I/O 错误留给后续层,职责会更清楚。
常见问题
在 Linux 上调用 os.path.isreserved 会按 Windows 规则判断吗?
不会把 POSIX 的 os.path 自动切换成 Windows 模块。目标是 Windows 时直接使用 ntpath.isreserved(),这样判断规则与目标格式一致。
isreserved 返回 False 就一定能创建文件吗?
不一定。它不检查父目录、权限、磁盘状态、路径长度或并发变化;最终创建仍要捕获 OSError 并给出可恢复的处理。
还要继续使用 pathlib.PurePath.is_reserved 吗?
Python 3.15 的变更说明已移除这个旧入口,建议迁移到 os.path.isreserved()。跨平台生成 Windows 路径的程序则明确使用 ntpath.isreserved()。
Go maps.Clone 传入 nil map 时返回值是什么
- 上一篇
- Go maps.Clone 传入 nil map 时返回值是什么
- 下一篇
- Go gzip Header.Name 怎么设置归档文件名
-
- 文章 · python教程 | 1小时前 | Python教程 · pathlib · 文件系统 · 版本兼容 · Python 目录权限 Python 3.15 pathlib.Path.mkdir parent_mode
- Python pathlib.Path.mkdir 的 parent_mode 怎么影响中间目录
- 243浏览 收藏
-
- 文章 · python教程 | 3小时前 | 并发 · python · C API · Python C扩展 free-threaded Py_GIL_DISABLED
- Python free-threaded 构建中 C 扩展如何声明线程安全状态
- 260浏览 收藏
-
- 文章 · python教程 | 5小时前 | python · risc-v · Python 3.15 · riscv64 · 原生扩展 · Python打包 · RISC-V wheel Python 3.15 riscv64 Python扩展
- Python 3.15 RISC-V 支持落地后扩展构建要检查哪些假设
- 493浏览 收藏
-
- 文章 · python教程 | 6小时前 |
- Python functools.lru_cache 缓存可变参数为什么不可哈希
- 388浏览 收藏
-
- 文章 · python教程 | 7小时前 | 日志 · python · 文件轮转 · Python logging 日志轮转 RotatingFileHandler
- Python logging RotatingFileHandler 轮转后如何保留最近几份
- 236浏览 收藏
-
- 文章 · python教程 | 8小时前 | python · 进程管理 · Python subprocess.run 进程树 TimeoutExpired
- Python subprocess.run timeout 后怎么终止子进程树
- 495浏览 收藏
-
- 文章 · python教程 | 10小时前 | python · queue · multiprocessing ·
- Python multiprocessing.Queue 关闭后为什么还有后台线程
- 125浏览 收藏
-
- 文章 · python教程 | 11小时前 | JSON · Python教程 · 异常排查 · 数据解析 · Python json.loads JSONDecodeError lineno colno pos JSON排错
- Python JSONDecodeError 的 lineno 和 colno 怎么映射到原文
- 326浏览 收藏
-
- 文章 · python教程 | 12小时前 | python · CSV数据处理 · Python csv csv.DictReader 重复列名
- Python csv.DictReader 遇到重复列名时怎么保存数据
- 371浏览 收藏
-
- 文章 · python教程 | 14小时前 |
- Python sqlite3 事务提交后游标还能不能继续使用
- 181浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 41次使用
-
- SuperCLUE
- SuperCLUE是权威的中文大语言模型综合评测基准,涵盖语言理解、知识应用、AI Agent智能体及安全性等12项核心能力。通过多轮对话与客观测试,定期发布榜单与技术报告,为模型研发、优化及行业选型提供科学依据。
- 191次使用
-
- C-Eval
- 深入了解C-Eval中文评估套件,涵盖52个学科与4级难度。本文详解其功能特点、Zero-shot/Few-shot使用方法及代码示例,助您全面评测LLM中文理解与泛化能力。
- 129次使用
-
- AI Prompt Library
- 探索AI Prompt Library免费资源库,涵盖营销、写作及多场景AI提示词。兼容ChatGPT、Claude等工具,一键复制优化输出,提升工作效率。
- 56次使用
-
- Generrated
- Generrated汇集9300+张DALL·E生成图像及对应提示词,支持查看完整图集、对比DALL·E 2与3版本差异,是AI绘图新手学习Prompt设计与获取创作灵感的实用工具。
- 42次使用
-
- Golang交叉编译之跨平台编译使用详解
- 2022-12-22 309浏览
-
- Golang如何调用windows下的dll动态库中的函数
- 2023-01-07 109浏览
-
- golang 在windows中设置环境变量的操作
- 2022-12-29 484浏览
-
- Goland 2019的安装、破解和汉化教程(超级详细)
- 2022-12-31 425浏览
-
- Go 用 io/fs 做配置目录快照:过滤、排序与差异报告小工具
- 2026-07-24 339浏览

