2011-07-19 2 views
2

Pythonから、特定の文字列が有効なクロスプラットフォームのフォルダ名であるかどうかを確認したいと考えています。 )、しかし私はいくつかの特別なケースがあると確信しています(例:conなど)。Pythonのプラットフォームに互換性のないフォルダ(ファイル)名を確認する方法

ライブラリがありますか?


python(3.2)からWindows(7)上にドット( '。')で終わる名前のフォルダを作成しました。

作成されたフォルダがftpされたとき(Linuxには無関係だと思いますが)、ドットはありませんでした。(大括弧なし)それはもはや(そして、それに反して、これは多くのハイパーリンクを破った)。

私はコマンドラインからチェックしましたが、フォルダに '。'がないようです。

cd c:\Users. 

作品ファイル名だけどうやら、フォルダ名の末尾に単一のドットを追加することが無視され

mkdir tmp. 
dir 
cd tmp 
cd ..\tmp. 

、例えば:で期待どおり。

+1

プラットフォームに関係なく、問題を解決してフォルダ名をできるだけシンプルにすることができます。これは非常に完全な混乱であり、Linuxを無視しています。 –

+0

この 'mkdir" tmpを試しましたか? "おそらく "。" –

+0

@Cat Plus Plus - 具体的な例では、フォルダ名はユーザー入力によるものです。私の質問は、一般的な場合の詳細です。つまり、文字列を指定して、有効なフォルダ名であるかどうかを判断します。そして、はい、回避策が可能で、私はそれを適用しましたが、まだ私はより制限の少ない解決策を探しています – zsepi

答えて

2

いいえ、これは悲しいことにこれを行う方法はありません。ウィンドウの場合は、基本的に次のコードを使ってすべての不正な文字を取り除くことができます。しかし、誰かがFATファイルシステムを持っていれば、これらのファイルも処理する必要があります。基本的には、すべてのファイルシステムのドキュメントを読み、完全なリストを用意する必要があります。ここでは、NTFSを起点にしています:

ILLEGAL_NTFS_CHARS = "[<>:/\\|?*\"]|[\0-\31]" 
def __removeIllegalChars(name): 
    # removes characters that are invalid for NTFS 
    return re.sub(ILLEGAL_NTFS_CHARS, "", name) 

そして、COMを取り除くために、いくつかの "禁じられた"名前リストが必要です。

2

スペースまたはピリオドでファイルまたはディレクトリ名を終了しないでください。 下位のファイルシステムはこのような名前をサポートしていますが、Windowsシェル とユーザーインターフェイスはサポートしていません。ページがあるというWindows用、あまりにもあなたに他の違法名に関する情報を提供します

http://msdn.microsoft.com/en-us/library/aa365247.aspx#naming_conventions

。あなたの自己を言ったようにCONを含む。

これらの(厳しいような)ルールを尊重すれば、Linuxや他のほとんどのシステムでも安全になると思います。

関連する問題