文字列を有効なファイル名に変換しますか? 質問する

文字列を有効なファイル名に変換しますか? 質問する

ファイル名として使用したい文字列があるので、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

他にもありますが、スラッグ化ではなくエスケープについて扱っているため省略しました。

おすすめ記事