【无标题】

我在处理一个和文件名有关的操作,由于我不确定文件名,为了防止违法字符,我需要对文件名进行合法性检查,并且剔除非法字符

我写了这样的一个函数

    def format_filename(filepath):
        dir, filename = os.path.split(filepath)
        invalid_chars_regex = r'[<>:"/\\|?*]'
        filename = re.sub(invalid_chars_regex, '', filename)
        return os.path.join(dir, filename)

但是很神奇的地方在于:仍然报错

Error during renaming: [Errno 22] Invalid argument: 'D:/web/Resources\\Resources\\html\\xxx\t.html', at line 102

并且出错原因是超出现了一个制表符\t

但是我原来以及匹配了\

查了一下之后 发现原因是:

制表符这样子以\开头的在我们眼里是一个\加上一个字符,但是实际上这个东西在编码里面是独立编码的,这样就导致了他不会把\去掉

随后把代码改为:

        invalid_chars_regex = r'[<>:"/\\|?*\x00-\x1F]'

后 不报错了

你可能感兴趣的:(python)