由于各种文件名相关原因,在 Python 中创建文件可能会失败:
On encrypted filesystems the max filename length is 143 bytes.
To decide whether a filename is short enough you can find his byte length in Python
with len(filename.encode()). –
Marvo
Mar 9, 2018 at 12:45
有些字符会在文件系统中产生问题,不推荐或可能在另一个文件系统中产生问题,例如:
\n!@#$%^&*()[]{};:,/<>?\|
~=+`
... .
有什么方便的功能可以预先告诉我是否
解决方案如: 在不在路径目标处创建文件的情况下检查路径在 Python 中是否有效 或者 在 python 中验证文件名
不幸的是不满足要求 a) - c)(即使是第一个也不能识别加密文件夹/驱动器的 143 个字符限制)
我通常很想最初创建非常严格的规则并在需要时取消它们......对于具有与 Python 自然支持的不同功能和要求的专用文件系统,您可能需要阅读文档,实验,并自己编写规则。
就是说,试一试可能会很好,并为您提供比您想要编写或支持的更好的功能(例如,您是否应该测试各种
PermissionError
案例或过多网络文件系统的处理?),并且您可以多次使用异常来给出更好的错误消息或处理(注意只选择第一个匹配项,所以更早地放置不那么通用、更多继承的异常)
try:
# attempt to create file
except IsADirectoryError:
raise CustomException("did you mean to target a directory?")
except OSError as ex:
raise CustomException("improper file") from ex
...
except Exception as ex:
raise CustomException("unexpected Exception") from ex
else: # did not raise
# extra opportunity to verify the file was actually written
参考异常层次结构树,了解您在通用之前可能期望或想要处理的内容
Exception
https://docs.python.org/3/library/exceptions.html#exception-hierarchy
如果允许外部包,我建议您尝试pathvalidate,如果您需要查找
为什么它会失败,函数
validate_filename
应该是有趣的?而is_valid_filename
如果您需要查找文件名是否有效