これは、 「任意の文字列から有効なWindowsファイル名を作成する方法」に触発されています。、任意の文字列を取得して有効なファイル名にする関数を作成しました。
私の職務は技術的にはこの質問に対する答えになるはずですが、答えとして投稿する前に、愚かなことをしたり、見落としたりしていないことを確認したいと思います。
私はこれをtvnamerの一部として書きました-TVエピソードのファイル名を取得し、http://www.thetvdb.comから取得したエピソードを使用して、それらの名前を一貫して適切に変更します-ソースファイル名は有効なファイルである必要がありますが、シリーズ名前が修正され、エピソード名が修正されたため、理論的には両方に任意の文字を含めることができます。私は使いやすさほどセキュリティについては心配していません。これは主に、ファイルの名前が変更され.some.series - [01x01].avi
てファイルが「消える」のを防ぐためです(悪意のある人々を阻止するためではありません)。
それはいくつかの仮定をします:
- ファイルシステムはUnicodeファイル名をサポートしています。HFS +とNTFSはどちらもそうですが、これは大多数のユーザーを対象としています。Unicode文字を取り除くための引数もあり
normalize_unicode
ます(tvnamerでは、これは構成XMLファイルを介して設定されます) - プラットフォームはDarwin、Linuxのいずれかであり、その他はすべてWindowsとして扱われます
- ファイル名は表示されることを目的としています(のようなドットファイルではありません)-必要に応じて、ファイル名をフォーマット
.bashrc
できるようにコードを変更するのは簡単です.abc
私が(うまくいけば)扱ったこと:
- ファイル名がで始まる場合はアンダースコアを前に付けます(ファイル名とファイルが消え
.
ないようにします).
..
- ディレクトリセパレータを削除
/
します:LinuxおよびOSX/
の:
場合 - 無効なWindowsファイル名文字の削除
\/:*?"<>|
(Windowsの場合、または強制的にwindows_safe=True
) - 予約済みのファイル名の前にアンダースコアを付けます(
COM2
になる_COM2
、にNUL
なる_NUL
など) - Unicodeデータのオプションの正規化。これにより、変換不可能な文字が削除されます
å
。a
- Linux / Darwinでは255文字を超え、Windowsでは32文字を超えるファイル名の切り捨て
コードと一連のテストケースは、http: //gist.github.com/256270で見つけていじることができます。「本番」コードはtvnamer/utils.pyにあります。
この機能にエラーはありますか?私が逃した条件はありますか?