[解決済み] 文字列を有効なファイル名に変換しますか?
2022-03-14 23:45:29
質問
ファイル名として使用したい文字列があるので、Pythonを使ってファイル名として許されない文字をすべて削除したいのですが、どうすればいいですか?
私はどちらかというと厳格にしたいので、例えば、文字と数字とその他の小さな文字セットだけを残して
"_-.() "
. 最もエレガントな解決策は何でしょうか?
ファイル名は複数のOS(Windows、Linux、Mac OS)で有効である必要があります。私のライブラリにあるMP3ファイルで、曲名がファイル名になっており、3台のマシンで共有しバックアップしています。
解決方法は?
を見ることができます。 Django フレームワーク は、任意のテキストからどのように"slug"を作成するかについて説明します。 スラッグは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
他にもありますが、スラッグ化ではなく、エスケープに対応しているので割愛しました。
関連
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] バイトを文字列に変換する
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] 文字列をfloatやintにパースするにはどうしたらいいですか?
-
[解決済み] Pythonで文字列の部分文字列を取得するにはどうすればよいですか?
-
[解決済み] Pythonで文字列を小文字にするには?
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] Pythonでファイル名から拡張子を抽出する
-
[解決済み】文字列をdatetimeに変換する
-
[解決済み】Bashでファイル名と拡張子を抽出する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
PicgoのイメージベッドツールをPythonで実装する
-
pythonサイクルタスクスケジューリングツール スケジュール詳解
-
[解決済み】Python elifの構文が無効です【終了しました
-
[解決済み】Pythonでgoogle APIのJSONコードを読み込むとエラーになる件
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み】ImportError: bs4という名前のモジュールがない(BeautifulSoup)
-
[解決済み] WindowsとLinuxのディレクトリ名で禁止されている文字は何ですか?
-
[解決済み] Windowsで、指定した文字列が正当なファイル名であるかどうかを確認するにはどうすればよいですか?