0

它的灵感来自“如何从任意字符串生成有效的 Windows 文件名?” ,我编写了一个函数,它将采用任意字符串并使其成为有效的文件名。

从技术上讲,我的功能应该是对这个问题的回答,但我想确保在将其发布为答案之前,我没有做任何愚蠢的事情或忽略任何事情。

我把它写成tvnamer的一部分- 一个实用程序,它接受电视剧集文件名,并将它们重命名好且一致,从http://www.thetvdb.com提取一集- 而源文件名必须是有效文件,系列名称已更正,剧集名称 - 因此理论上两者都可以包含任何字符。我不太关心安全性而是可用性 - 这主要是为了防止文件被重命名.some.series - [01x01].avi和文件“消失”(而不是阻止邪恶的人)

它做了几个假设:

  • 文件系统支持 Unicode 文件名。HFS+ 和 NTFS 都可以,这将覆盖大多数用户。还有一个normalize_unicode参数可以去除 Unicode 字符(在 tvnamer 中,这是通过配置 XML 文件设置的)
  • 该平台是 Darwin、Linux,其他一切都被视为 Windows
  • 文件名应该是可见的(不是像 dotfile 这样的点文件.bashrc)——如果需要,可以很简单地修改代码以允许.abc格式化文件名

我(希望)处理的事情:

  • 如果文件名以以下划线开头.(防止文件名. ..和文件消失)
  • 删除目录分隔符:/在 Linux/:OS X 上
  • 删除无效的 Windows 文件名字符\/:*?"<>|(在 Windows 上时,或强制使用windows_safe=True
  • 在保留文件名前加上下划线(COM2变成_COM2NUL变成_NUL等)
  • Unicode 数据的可选规范化,因此å变为a和不可转换的字符被删除
  • 在 Linux/Darwin 上截断超过 255 个字符的文件名,在 Windows 上截断 32 个字符

代码和一堆测试用例可以在http://gist.github.com/256270找到和修改。“生产”代码可以在 tvnamer/utils.py中找到

这个函数有错误吗?我错过了什么条件?

4

1 回答 1

1

我注意到的一点:在 NTFS 下,某些文件无法在特定目录中创建。EG $在根目录下启动

于 2010-08-23T20:26:49.263 回答