在Python中将字符串转换为有效的文件名

问题:

我有一个我想用作文件名的字符串,所以我想使用Python删除文件名中不允许的所有字符。
我宁愿比其他的严格,所以让我们说,我只想保留字母,数字和一小组其他字符,如"_-.() "。什么是最优雅的解决方案?
文件名需要在多个操作系统(Windows,Linux和Mac OS)上有效 – 它是我的库中的MP3文件,歌曲名称作为文件名,并在3台机器之间共享和备份。

回答:

您可以查看Django framework如何从任意文本创建“lug。”。一个slug是URL和文件名友好的。
他们的template/defaultfilters.py(在第183行)定义了一个函数slugify,这可能是这种事情的黄金标准。本质上,他们的代码如下。

def slugify(value):
    """
    Normalizes string, converts to lowercase, removes non-alpha characters,
    and converts spaces to hyphens.
    """
    import unicodedata
    value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore')
    value = unicode(re.sub('[^\w\s-]', '', value).strip().lower())
    value = unicode(re.sub('[-\s]+', '-', value))

还有更多,但我把它留下来,因为它没有解决s病,而是逃避。

 
 Code问答: codewenda.com
Stackoverflow:Turn a string into a valid filename in Python

发表评论

电子邮件地址不会被公开。 必填项已用*标注

52 − = 48