在 Python 中检查文件名有效性的通用方法?

问题描述 投票:0回答:2

由于各种文件名相关原因,在 Python 中创建文件可能会失败:

  1. 文件路径太长(参见例如:ubuntu 中文件路径的最大长度是什么
  2. 文件名可能太长,因为文件系统是加密的——参见例如评论回答那个问题
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
  1. 有些字符会在文件系统中产生问题,不推荐或可能在另一个文件系统中产生问题,例如:

     \n!@#$%^&*()[]{};:,/<>?\|
    ~=+`

  2. ... .

有什么方便的功能可以预先告诉我是否

  • a) 我的文件名可以使用
  • b) 可能会导致其他文件系统出现问题
  • c) 为什么它会失败?

解决方案如: 在不在路径目标处创建文件的情况下检查路径在 Python 中是否有效 或者 在 python 中验证文件名

不幸的是不满足要求 a) - c)(即使是第一个也不能识别加密文件夹/驱动器的 143 个字符限制)

python filesystems
2个回答
1
投票

我通常很想最初创建非常严格的规则并在需要时取消它们......对于具有与 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


0
投票

如果允许外部包,我建议您尝试pathvalidate,如果您需要查找

为什么它会失败,函数
validate_filename应该是有趣的?
is_valid_filename
如果您需要查找文件名是否有效

© www.soinside.com 2019 - 2024. All rights reserved.