它受到"How to make a valid Windows filename from an arbitrary string?"的启发,我编写了一个函数,它将采用任意字符串并使其成为有效的文件名。
我的功能在技术上应该是这个问题的答案,但我想确保在发布它作为答案之前我没有做过任何愚蠢或忽略的事情。
我将此作为tvnamer的一部分写成了 - 这是一个实用程序,可以获取电视剧集文件名,并且从http://www.thetvdb.com拉出一集,将其重命名为一致,而源文件名必须是有效文件,系列名称已更正,而剧集名称 - 因此两者都可以包含理论上的任何字符。我不太关心安全性作为可用性 - 它主要是为了防止文件被重命名.some.series - [01x01].avi
而文件“消失”(而不是挫败邪恶的人)
它做了一些假设:
normalize_unicode
参数来删除Unicode字符(在tvnamer中,这是通过配置XML文件设置的).bashrc
这样的点文件) - 如果需要,修改代码以允许.abc
格式文件名就足够了我(希望)处理的事情:
.
开头,则前缀下划线(阻止文件名.
..
和文件消失)/
,OS X上的/
和:
\/:*?"<>|
(在Windows上,或强制使用windows_safe=True
时)COM2
变为_COM2
,NUL
变为_NUL
等)å
变为a
并且不可转换的字符被删除可以在http://gist.github.com/256270找到代码和一堆测试用例。可以找到“生产”代码in tvnamer/utils.py
此功能有错误吗?我错过了什么条件?
答案 0 :(得分:1)
有一点我注意到:在NTFS下,某些文件无法在特定目录中创建。 例如。 $ boot in root