Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python makeValidFilename函数可能存在错误?_Python_Filesystems_Sanitization_File Rename - Fatal编程技术网

Python makeValidFilename函数可能存在错误?

Python makeValidFilename函数可能存在错误?,python,filesystems,sanitization,file-rename,Python,Filesystems,Sanitization,File Rename,它的灵感来源于,我编写了一个函数,可以接受任意字符串并使其成为有效的文件名 从技术上讲,我的功能应该是回答这个问题,但我想确保我没有做过任何愚蠢的事情,或者忽略了任何事情,然后再将其作为答案发布 我写这篇文章是作为一个实用程序的一部分——这个实用程序接受电视剧集文件名,并使用从中提取的一集对其进行良好一致的重命名——而源文件名必须是有效文件,剧集名称被更正,集名也被修改——因此理论上两者都可以包含任何字符。与其说我关心的是安全性,不如说是可用性——它主要是为了防止文件被重命名.some.seri

它的灵感来源于,我编写了一个函数,可以接受任意字符串并使其成为有效的文件名

从技术上讲,我的功能应该是回答这个问题,但我想确保我没有做过任何愚蠢的事情,或者忽略了任何事情,然后再将其作为答案发布

我写这篇文章是作为一个实用程序的一部分——这个实用程序接受电视剧集文件名,并使用从中提取的一集对其进行良好一致的重命名——而源文件名必须是有效文件,剧集名称被更正,集名也被修改——因此理论上两者都可以包含任何字符。与其说我关心的是安全性,不如说是可用性——它主要是为了防止文件被重命名
.some.series-[01x01].avi
和文件“消失”(而不是为了阻止邪恶的人)

它做出了一些假设:

  • 文件系统支持Unicode文件名。HFS+和NTFS都有,这将覆盖大多数用户。还有一个
    normalize_unicode
    参数用于去除unicode字符(在tvnamer中,这是通过配置XML文件设置的)
  • 该平台要么是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