ファイル名と検索

ディレクトリ操作

ファイル名の付け方は厳密にはコンピュータの機種によって異なる.しかし,Mathematica はすべてのシステムで機能するかなり汎用性のあるメカニズムを提供する.

Mathematica ではすべてのファイルはディレクトリの階層に分けられて保存されている.特定のファイルを探し出すには,Mathematica はそのファイル名と,それが属するディレクトリとを知らなければならない.

特定の時点では,ユーザは現ディレクトリにいて,そこからの相対位置としてディレクトリを指定することができる.例えば,現ディレクトリにあるファイルには,ディレクトリの指定を省略して,単にファイル名を指定するだけでアクセスできる.

Directory[]現ディレクトリ
SetDirectory["dir"] を現ディレクトリに設定
ResetDirectory[]前のディレクトリに戻る

ディレクトリ操作

現ディレクトリを表示する.
In[1]:=
Click for copyable input
Out[1]=
サブディレクトリを現ディレクトリに設定する.
In[2]:=
Click for copyable input
Out[2]=
現ディレクトリが更新された.
In[3]:=
Click for copyable input
Out[3]=
前のディレクトリに戻る.
In[4]:=
Click for copyable input
Out[4]=

SetDirectoryを実行するとき,ディレクトリ名はオペレーティングシステムに合わせた形式で指定することができる.例えば,Unixシステムでは,ディレクトリの階層の1つ上のレベルのディレクトリはで指定でき,ホームディレクトリはで指定できる.

SetDirectoryで指定するディレクトリに移行するときはいつでも,Mathematica はそれまでにいたディレクトリを記憶しておく.ResetDirectoryによって,このディレクトリに戻ることができる.一般に,Mathematica はディレクトリのスタックをDirectoryStack[]に保存している.SetDirectoryを実行するたびに新たなディレクトリがこのスタックに追加され,ResetDirectoryを実行するたびに対応するディレクトリがスタックから削除される.

ParentDirectory[]現ディレクトリの親ディレクトリ
$InitialDirectoryMathematica が起動時の初期ディレクトリ
$HomeDirectoryホームディレクトリ(定義されているとき)
$BaseDirectoryMathematica がロードするシステム規模のファイルのためのベースディレクトリ
$UserBaseDirectoryMathematica がロードするユーザ独自のファイルのためのベースディレクトリ
$InstallationDirectoryインストールした Mathematica が置かれるトップレベルのディレクトリ

特別なディレクトリ

ファイルの検索

特定のファイルを指定すると,Mathematica はそのファイルをいくつかのステップで検索する.まず初めに,オペレーティングシステムまたはシェルに標準の様式を使う.

Mathematica は指定したファイル名をスキャンし,等のメタ文字が含まれているかどうかを調べる.特殊文字が見付かれば,ファイル名全体をオペレーティングシステムまたはシェルに引き渡して解釈を促す.Unixシステムでは name* 等は,この時点で展開される.しかし一般に,Mathematica はオペレーティングシステムまたはシェルが返す出力を取り,これをファイルのフルネームとみなす.

出力ファイルについては,これが Mathematica の行う処理のすべてである.Mathematica が指定したファイルを見出せないときは,その名前のファイルを新たに作り出す.

ファイルから入力を得ようとする場合,Mathematica はさらに次の処理をする.実行しようとしている関数のオプションPathの値を参照し,それに指定された検索パスを探す.デフォルトでPathには大域変数$Pathが指定されている.

Get["file",Path->{"dir1","dir2",...}]ディレクトリ から相対的に指定された位置にあるファイルを検索し読み込む
$Path入力ファイルの相対検索パス

ファイルの検索パス

一般に,大域変数$Pathにはディレクトリを表す文字列のリストが割り当てられている.入力ファイルを指定すると,Mathematica はこのリストに現れるディレクトリを順に現ディレクトリに移し,その中に要求されたファイルがあるかどうかを調べる.

$Pathの典型的な設定.現ディレクトリ()とホームディレクトリ()が初めに現れる.
In[5]:=
Click for copyable input
Out[5]=

ファイルを探すのにFindFileを使うこともできる.

FindFile["name"]Getおよびその関連関数によりロードされる,指定された名前のファイルを見付ける
FileExistsQ["name"]ファイルが存在するかどうかを判別する

$Path上のファイルを見付ける

FindFile$Path上のディレクトリすべてを検索し,GetNeeds,その他の関数でロードされるファイルの絶対名を返す.FileExistsQは,指定された名前のファイルが存在するかどうかを検定する.

In[5]:=
Click for copyable input
Out[5]=

FindFileをパッケージ名に適用すると,そのパッケージのinit.mファイルの絶対名が返される.

In[5]:=
Click for copyable input
Out[5]=

ディレクトリの内容の一覧

FileNames[]現ディレクトリにあるすべてのファイル
FileNames["form"]文字列パターン form にマッチする現ディレクトリのすべてのファイルのリスト
FileNames[{"form1","form2",...}]任意の文字列パターン にマッチする現ディレクトリのすべてのファイルのリスト
FileNames[forms,{"dir1","dir2",...}]文字列パターン forms にマッチするすべての のディレクトリのファイルのリスト
FileNames[forms,dirs,n]n レベル下までのすべてのサブディレクトリに含まれるファイル
FileNames[forms,dirs,Infinity]すべてのサブディレクトリのファイルを含む
FileNames[forms,$Path,Infinity]$Pathに指定されているサブディレクトリのうちのいずれかに含まれ,名前がパターン forms にマッチするすべてのファイルを列挙

ファイル検索におけるディレクトリ指定

FileNamesはファイル名を表す文字列のリストを返す.現ディレクトリにないファイルを示すときは,現ディレクトリからの相対パスで表したファイル名となる.すべてのファイル名はそれが作られたコンピュータシステムにおけるフォーマットで与えられる.

現ディレクトリにある拡張子を持つすべてのファイルのリスト.
In[6]:=
Click for copyable input
Out[6]=
現ディレクトリにあって,で始まる名前を持つファイルと,サブディレクトリにあってで始まる名前を持つファイル.
In[7]:=
Click for copyable input
Out[7]=

FileNamesに与えるファイル名の形式には,Mathematica のどの文字列パターンオブジェクトでも,通常~~演算子と組み合わせて使うことができる.

現行の作業ディレクトリのすべてのファイルの中で,その名前がにマッチするもののリストを返す.
In[3]:=
Click for copyable input
Out[3]=
以下は名前が形式であるファイルだけをリストする.ここでd は1桁以上の数列である.
In[3]:=
Click for copyable input
Out[3]=

Filenameの作成

DirectoryName["file"]ファイル名からディレクトリ名を抽出
FileNameJoin[{"directory","name"}]ディレクトリ名とファイル名を組み合せて完全なファイル名を作る
ParentDirectory["directory"]ディレクトリの親ディレクトリ
FileNameJoin[{"dir1","dir2",...,"name"}]ディレクトリ名の階層から完全なファイル名を作る
FileNameJoin[{"dir1","dir2",...}]ディレクトリ名の階層からディレクトリの単一の名前を作る

ファイル名の操作

異なるコンピュータシステムでは異なる方法でファイル名が作られることに注意する.したがって,例えば,Windowsシステムでは の形の名前が使われ,Unixシステムでは の形の名前が使われる.関数FileNameJoinは使っているコンピュータに合わせて適切なファイル名を作る.

ファイル名のディレクトリの部分を返す.
In[8]:=
Click for copyable input
Out[8]=
同じディレクトリの別のファイルの完全名を作る.
In[9]:=
Click for copyable input
Out[9]=
FileNameSplit["name"]ファイル名をディレクトリとファイル名のリストに分割する
FileNameTake["name",...]ファイル名の一部を抽出する
FileNameDrop["name",...]ファイル名の一部を削除する
FileNameDepth["name"]ファイル名の中のパス要素の数を得る
$PathnameSeparator使用中のオペレーティングシステムで使われるパス名のセパレータ

ファイル名を操作する

FileNameSplitFileNameJoin等の関数は,ファイル名に対して追加の操作をすることができる.これらはオペレーティングシステムにより使用されるファイル名のセパレータを尊重してファイル名を適切に分割する.FileNameJoinはデフォルトで,使用中のオペレーティングシステムに適した正則形式で名前を生成するよう$PathnameSeparatorを使う.

関連ファイルの組を作るに際して,1つのファイルを読むときに別のファイルを参照できるようにしておくと便利なことがある.大域変数$InputFileNameは今入力が読み込まれているファイル名を与える.DirectoryNameToFileNameを使って,関連する他のファイル名を指定することができる.

$InputFileName入力が現在読み込まれているファイルの名前

Mathematica で読み込み中のファイルの参照法

Mathematica でファイルを扱う場合の問題は,ファイルおよびディレクトリの名前の形式がコンピュータシステムにより異なるという点である.つまり,標準 Mathematica パッケージを含むファイルの名前等が,システムにより大きく異なる可能性があるということである.しかし,慣用的なシーケンスを使うと,すべての氏s手生むで同じコマンドを使って標準 Mathematica パッケージを読み込むことができる.そのためには,それぞれのパッケージで形式 のいわゆる Mathematica コンテキストを定義するのである.それぞれのシステムで,すべてのファイルが定義するコンテキストに対応した名前を持つようになる.ここでコマンド を使うと,Mathematica はそのコンテキスト名を,使用中のコンピュータシステムに適したファイル名に自動的に変換する.

標準のFilename拡張子

file.mMathematica 式を保存したテキスト形式のファイル
file.nbMathematica ノートブック形式のファイル
file.mxMathematica 式の定義を保存したDumpSave形式のファイル

典型的な Mathematica ファイルの指定書式

Mathematica のノートブック型インターフェースを使っている場合,Mathematica の入出力だけでなくテキスト,グラフィックス,他の文書要素を含む完全なノートブックを Mathematica フロントエンドで保存することができる.

Mathematica ノートブックファイルには,拡張子.nbで終るファイル名を付けるようにする.ほとんどのバージョンの Mathematica でこの方法が認識される.

FileBaseName["name"]拡張子なしのファイルの名前
FileExtension["name"]ファイル名に対するファイル拡張子

ファイル名と拡張子

FileBaseNameFileExtensionを使うと,ファイル名とその拡張子を抽出することができる.

Mathematica のフロントエンドでノートブックを開くと,ノートブックの内容は即座に表示されるが,評価のためのカーネルへの内容の送出は,通常,ユーザからの要求があるまで行われない.

ただし,Mathematica ノートブック内でフロントエンドのセルメニューを使い,特定のセルを初期化セルに指定しておけば,ノートブックを開くたびにセルの内容は自動的に評価される.

2番目のセルのセルブラケットにアルファベットのIが付いているが,これは初期化セルと呼ばれ,ノートブックが開かれるたびに評価される.

28.gif

場合によっては作成した数式等をノートブックとパッケージの両方のファイル形式で保存しておくと便利である.ノートブックファイルには説明文と一緒に式を入れておけるし,パッケージファイルには Mathematica が直接理解できる定義だけを分けて保存しておける.このような形態のファイル保存を行うには,すべての式を初期化セルに入れておけばよい.ノートブックが保存されるたびに,もとの定義が.m形式のファイルに自動保存される.

New to Mathematica? Find your learning path »
Have a question? Ask support »