ファイル名として使用したい文字列があるので、Python を使用して、ファイル名に使用できない文字をすべて削除したいと思います。
厳密にしたいので、文字、数字、および などの他の文字の小さなセットのみを保持したいとします"_-.() "
。最もエレガントな解決策は何でしょうか?
ファイル名は複数のオペレーティング システム (Windows、Linux、Mac OS) で有効である必要があります。これは、曲のタイトルがファイル名として付けられたライブラリ内の MP3 ファイルであり、3 台のマシン間で共有およびバックアップされています。
ベストアンサー1
あなたはDjangoフレームワーク(ただし、ライセンスを考慮してください!) 任意のテキストから「スラッグ」を作成する方法。スラッグは URL とファイル名に適しています。
Djangoのテキストユーティリティは関数を定義します。slugify()
、これはおそらくこの種のもののゴールドスタンダードです。基本的に、そのコードは次のとおりです。
import unicodedata
import re
def slugify(value, allow_unicode=False):
"""
Taken from https://github.com/django/django/blob/master/django/utils/text.py
Convert to ASCII if 'allow_unicode' is False. Convert spaces or repeated
dashes to single dashes. Remove characters that aren't alphanumerics,
underscores, or hyphens. Convert to lowercase. Also strip leading and
trailing whitespace, dashes, and underscores.
"""
value = str(value)
if allow_unicode:
value = unicodedata.normalize('NFKC', value)
else:
value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore').decode('ascii')
value = re.sub(r'[^\w\s-]', '', value.lower())
return re.sub(r'[-\s]+', '-', value).strip('-_')
そして古いバージョン:
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))
# ...
return value
他にもありますが、スラッグ化ではなくエスケープについて扱っているため省略しました。