ファイル名が使えるか確認する

 ユーザーがファイル名の入力したときのエラーで、ファイル名が使えない時があります。そんなことを確認するを試してみましょう。

 ファイル名に使用できない文字リスト

 Windowsにはファイル名に使用できない文字リストというのが存在してしています。そのリストは、名前空間System.IOのPathクラスのGetInvalidFileNameCharsメゾットで取得できます。メゾット名が長いですがGet(取得する)、Invalid(無効な)、FileName(ファイル名)、Chars(文字たち)って分割すれば、なんとなく分かりますかね。
 ではスクリプトを作ってみましょう。

import System
from System.IO import Path

#ファイル名に使用できない文字リスト取得
NoUseList = Path.GetInvalidFileNameChars()

print '調べるファイル名を入力してください。'
name = raw_input('--> ')

if name.IndexOfAny(NoUseList) < 0 : ←この行は下でもう少し詳しく説明します。
  print 'ファイル名('+ name + ')は使えます。'
else :
  print 'ファイル名('+ name + ')は使えません。'

raw_input()

出力画面:
 調べるファイル名を入力してください。
 --> py?hon.py
 ファイル名(py?hon.py)は使えません。
 次の行について、補足します。

if name.IndexOfAny(NoUseList) < 0 :

 これは、.NET FrameworkのStringクラスのIndexOfAnyメゾットを使用しています。IndexOfAnyメゾットはリストにある文字が、Stringクラスで最初に見つかった位置を返しています。なので、もしIndexOfAnyを使用しないと次のようになります。

Usable = True
for c in name:
  if c in NoUseList:
    Usable = False
if Usable == True:

 長いですね。.NET FrameworkのクラスにはMicrosoftのプログラマが蓄積したプログラムを短くするノウハウが反映されていることを今回のコードから垣間見れた気がします。