Python makeValidFilename函数可能存在错误?
它的灵感来源于,我编写了一个函数,可以接受任意字符串并使其成为有效的文件名 从技术上讲,我的功能应该是回答这个问题,但我想确保我没有做过任何愚蠢的事情,或者忽略了任何事情,然后再将其作为答案发布 我写这篇文章是作为一个实用程序的一部分——这个实用程序接受电视剧集文件名,并使用从中提取的一集对其进行良好一致的重命名——而源文件名必须是有效文件,剧集名称被更正,集名也被修改——因此理论上两者都可以包含任何字符。与其说我关心的是安全性,不如说是可用性——它主要是为了防止文件被重命名Python makeValidFilename函数可能存在错误?,python,filesystems,sanitization,file-rename,Python,Filesystems,Sanitization,File Rename,它的灵感来源于,我编写了一个函数,可以接受任意字符串并使其成为有效的文件名 从技术上讲,我的功能应该是回答这个问题,但我想确保我没有做过任何愚蠢的事情,或者忽略了任何事情,然后再将其作为答案发布 我写这篇文章是作为一个实用程序的一部分——这个实用程序接受电视剧集文件名,并使用从中提取的一集对其进行良好一致的重命名——而源文件名必须是有效文件,剧集名称被更正,集名也被修改——因此理论上两者都可以包含任何字符。与其说我关心的是安全性,不如说是可用性——它主要是为了防止文件被重命名.some.seri
.some.series-[01x01].avi
和文件“消失”(而不是为了阻止邪恶的人)
它做出了一些假设:
- 文件系统支持Unicode文件名。HFS+和NTFS都有,这将覆盖大多数用户。还有一个
参数用于去除unicode字符(在tvnamer中,这是通过配置XML文件设置的)normalize_unicode
- 该平台要么是Darwin,要么是Linux,其他一切都被视为Windows
- 文件名应该是可见的(而不是像
那样的点文件)-如果需要,修改代码以允许.bashrc
格式化文件名就足够简单了.abc
- 如果文件名以
开头,则在前面加下划线(防止文件名
和文件消失)。
- 删除目录分隔符:Linux上的
,OS X上的/
和/
:
- 删除无效的Windows文件名字符
(在Windows上时,或使用\/:*?“|
Windows\u safe=True强制执行时)
- 在保留文件名前加下划线(
变为COM2
,\u-COM2
变为NUL
等)\u-NUL
- Unicode数据的可选标准化,因此
变为å
并删除不可转换的字符a
- 在Linux/Darwin上截断超过255个字符的文件名,在Windows上截断超过32个字符的文件名
此函数是否有任何错误?我错过了任何条件?我注意到一点:在NTFS下,某些文件无法在特定目录中创建。 例如,根目录中的$Boot