インポートとエキスポート
データのインポートとエキスポート | エキスポートコンバータの開発 |
ファイルのインポートとエキスポート | インポート/エキスポートコンバータの自動ロード |
グラフィックスとサウンドのエキスポート | TeXの生成 |
インポートコンバータの開発 | Webでの資料交換 |
Import["file","Table"]は多くの種類のテーブル型のデータのインポートに使われる.その際,可能な限りデータファイルの書式を自動的に解釈して処理する.Export["file",list,"Table"]はデータをタブで区切って出力し,数字は2.3E5のようにCやFortranで使われる形式で表現する.
Import["name.ext"] | ファイル名から推測される形式を仮定してのデータのインポート |
Export["name.ext",expr] | ファイル名から推測される形式を仮定してのデータのエキスポート |
ImportおよびExportは表形式データだけでなく,グラフィックス,サウンド,数式および文書全体に対応するデータも扱うことができる.ImportおよびExportはしばしば,データが保存されているファイル名の拡張子を参照して適正な形式を推測できる.「グラフィックスとサウンドのエキスポート」および「ファイルのインポートとエキスポート」にImportおよびExportがどのように働くかの詳細が記載されている.ImportおよびExportはバイナリデータの生ファイルも使うことができる.
$ImportFormats | システムでサポートされているインポート可能形式 |
$ExportFormats | システムでサポートされているエキスポート可能形式 |
Import["file","List"] | ファイルから一次元のデータリストをインポートする |
Export["file",list,"List"] | 一次元のデータリストとしてファイルに list をエキスポートする |
Import["file","Table"] | ファイルから二次元のデータ表をインポートする |
Export["file",list,"Table"] | 二次元のデータ表として list をファイルにエキスポートする |
Import["file","CSV"] | CSV形式のデータをインポートする |
Export["file",list,"CSV"] | CSV形式のデータをエキスポートする |
データをWolfram言語内だけで使用する場合は,「Wolframシステムファイルの読み書き」に示されているように,構造が保存されている完全なWolfram言語の式として,ファイルにそのまま保存しておくのが一番よい.しかし他のプログラムとデータを交換したい場合は簡単なリストやテーブル形式で保存する方がより便利である.
各行に1個の数値だけがあるファイルではImport["file","List"]により,数値のリストとしてファイルの内容をインポートすることができる.各行がタブやスペースによって区切られた複数の数値からなる場合は,Import["file","Table"]で数値のリストが得られる.ファイルに非数値の項目が含まれる場合は,Wolfram言語の文字列として返される.
InputFormを用いて,文字列を表示することができる:
Import["file","List"] | 各行をそれぞれ数値や他のデータ項目として処理する |
Import["file","Table"] | 各行にある要素をそれぞれ数値や他のデータ項目として処理する |
Import["file","String"] | ファイル全体を1個の文字列として処理する |
Import["file","Text"] | ファイル全体を1個のテキスト文字列として処理する |
Import["file",{"Text","Lines"}] | 各行をテキストの文字列として処理する |
Import["file",{"Text","Words"}] | 切り離された語をテキストの文字列として処理する |
Wolfram言語ではグラフィックスやサウンドをさまざまな形式でエキスポートできる.Wolfram言語でノートブックフロントエンドを使っている場合は,Wolfram言語の提供する機能を使いグラフィックスおよびサウンドを他のプログラムへ直接コピーしたりペーストしたりすることができる.
Export["name.ext",graphics] | グラフィックスをファイル名から判断される形式でファイルにエキスポートする |
Export["file",graphics,"format"] | グラフィックスを指定された形式でエキスポートする |
Export["!command",graphics,"format"] | グラフィックスを外部コマンドにエキスポートする |
Export["file",{g1,g2,…},…] | グラフィックスの列をアニメーションにエキスポートする |
ExportString[graphics,"format"] | エキスポートされたグラフィックスの文字列表現を生成する |
"EPS" |
EPS形式 (
.eps
)
|
"PDF" |
Adobe Acrobat形式 (
.pdf
)
|
"SVG" |
スケーラブルベクターグラフィックス (
.svg
)
|
"PICT" | Macintosh PICT形式 |
"WMF" |
Windowsメタファイル形式 (
.wmf
)
|
"TIFF" |
TIFFファイル (
.tif
,
.tiff
)
|
"GIF" |
GIFと動画GIFファイル (
.gif
)
|
"JPEG" |
JPEGファイル (
.jpg
,
.jpeg
)
|
"PNG" |
PNG形式 (
.png
)
|
"BMP" |
Microsoftビットマップ形式 (
.bmp
)
|
"PCX" |
PCX形式 (
.pcx
)
|
"XBM" |
X window systemビットマップ (
.xbm
)
|
"PBM" |
PBM形式 (
.pbm
)
|
"PPM" |
PPM形式 (
.ppm
)
|
"PGM" |
PGM形式 (
.pgm
)
|
"PNM" |
PNM形式 (
.pnm
)
|
"DICOM" |
DICOM医療画像形式 (
.dcm
,
.dic
)
|
"AVI" |
Audio Video Interleave形式 (
.avi
)
|
通常,Wolfram言語外部にグラフィックスをエキスポートする場合はグラフィックスが描画されるサイズを絶対値で指定しておく必要がある.これを行うには,ExportにImageSizeオプションを指定する.
図の幅を印刷用ポイント数 x で印刷したいときは,ImageSize->x と指定する.ImageSize->72xi とすれば,図を xi インチの幅で印刷することができる.幅のデフォルト値は4インチになっている.ImageSize->{x,y}で図が x×y の領域に収まるようにスケーリングを施す.
ImageSize | Automatic | 印刷用ポイント数での絶対画像サイズ |
"ImageTopOrientation" | Top | 画像の中でファイルをどのような向きにするか |
ImageResolution | Automatic | dpi単位での画像の解像度 |
Exportのオプション
多くのプログラムおよびデバイスは,EPS等の解像度に依存しないフォーマットでグラフィックスを取り込むことができる.しかし,中にはグラフィックスを指定された解像度で特別なラスターまたはビットマップフォーマットに変換しておかなければ取り込めないものもある.そのような場合は,Exportにビットマップに必要な解像度をインチ当りのドット数(dpi単位)で指定したオプションImageResolutionを設定する.解像度を低く設定すれば画質は劣るが同時に画像を保存するのに必要なメモリ量も低く抑えることができる.よく使われる解像度はスクリーン表示で72dpi以上,プリンタ出力で300dpi以上である.
"WAV" | Microsoft wave形式 (.wav) |
"AU" |
μ
法則エンコード (
.au
)
|
"SND" | サウンドファイル形式 (.snd) |
"AIFF" | AIFF形式 (.aif, .aiff) |
Wolfram言語は,ユーザが自分のファイル形式コンバータを書き,それをWolfram言語のImportとExportフレームワークと統合させることのできる関数を提供している.形式コンバータを実装し,Importを使って任意の形式からデータをインポートすることができる.
Wolframシステムには形式コンバータの実装および登録方法を説明するソースコードも含まれている.これらはフォルダ$InstallationDirectory/SystemFiles/Formats/format にある.ここで format はBDF,DIF,MTP,SMILES,SurferGrid,TGF,TLEのいずれかである.登録コードはファイルImport.mまたはExport.mにあり,コンバータの実装はConverter.mというファイルにある.
Importと低レベルのコンバータ関数との間のインターフェースは,RegisterExport(ImportExport`コンテキスト)で指定される.基本的にRegisterImportはImportとExportフレームワークに,あるファイル形式の特定の要素をインポートするときに特定の関数を呼び出す方法を指示する.
低レベル関数はファイルあるいはストリームを入力として取り,インポートされたデータを含む規則のリストを返す.低レベル関数には次の2つの種類がある.(1) デフォルトインポータは明示的に登録されていない要素をインポートするときに,フレームワークにより呼び出される.(2) 条件付インポータはRegisterImportの第2引数に登録された特定の要素をインポートする.
ImportExport`RegisterImport["format", {"elem1"conditionalFunction1, "elem2"conditionalFunction2, …,defaultFunction}] | Importフレームワークによりデフォルトで使われる複数要素(elem1, elem2, …)およびそれに対応するコンバータ関数(conditionalFunction1, conditionalFunction2, …)を登録する.また,要求された要素が登録されたどの要素ともマッチしない場合に使われる defaultFunction を登録する. |
ImportExport`RegisterImport["format", {conditionalFuncs,defaultFunction}, {"elem3"postFunction3, "elem4"postFunction4, …}] | その入力が低レベル関数のうちの一つの出力となるような追加のコンバータ関数を登録する. |
デフォルトインポータ
新規形式の登録と実装
この場合,ImportとExportフレームワークに対して,形式"MyFormat1"のどの要素をインポートするときでも,関数MyFormat1`MyFormat1Importを呼び出すよう指示している.
フレームワークはデフォルトではファイル名を低レベル関数に渡すので,MyFormat1`MyFormat1Importは入力としてファイル名とオプションの集合を取る.この関数はElementName->ElementValueという形式の規則のリストを返さなければならない.
新しい形式のファイルのインポート
条件付未加工インポータ
形式に多数の要素が含まれる場合,特定の低レベル関数を使って特定の要素をインポートすると便利で効率的なことがある.これはRegisterImportの第2引数として "elem"->func という形式の規則のリストを与えることで実行できる.しかし,リストはリスト中で明示的に定義されているどれともマッチしない要素をインポートするときに呼ばれる,デフォルトインポータの名前で終了しなければならない.
条件付インポータによる新規形式の登録と実装
この登録はImportとExportフレームワークに,形式"MyFormat2"のファイルのエキスポート方法を指示する.
(1) "Data"要素をインポートするときはMyFormat2`MyFormat2DataImportを使う
(2) その他すべてにはMyFormat2`MyFormat2DefaultImportを使う
(1) "Data"要素をインポートするときはMyFormat2`MyFormat2DataImportを使う
(2) その他すべてにはMyFormat2`MyFormat2DefaultImportを使う
MyFormat2を使ったインポート
部分要素の指定
フレームワークはデフォルトではPartを使って部分要素をインポートする.
いくつかの大きいデータ集合を含むファイルの場合,特定のデータ集合を直接インポートした方が効率がよいであろう.例えば"EDF"ファイル形式のファイルから直接データ集合をインポートすることができる.
ポストインポータ
他の要素に基づいた要素を構築しなければならない場合がある.例えば,インポートするデータがグレイスケール画像を表す数値のリストである場合,"Image"要素のインポートにはまず"Data"要素のインポートが必要になる.このセクションでは"Graphics"要素と"Image"要素を使った2つの例を紹介する.
ポストインポータを使った新規形式の登録と実装
条件付きインポータとポストインポータとの違いを説明するために,"MyFormat2"を2つの追加要素"Graphics"と"Image"で拡張する."Graphics"要素は条件付きインポータを介してインポートされるが,"Image"要素はポストインポータを介してインポートされる.
次の登録はImportとExportフレームワークに形式"MyFormat3"のファイルのインポート方法を指示するものである.
(1) "Header"要素か"Graphics"要素の場合は,対応する条件付きインポータを呼び出す.
(2) "Image"要素の場合は,デフォルトインポータをまず呼び出してからその出力をMyFormat3`MyFormat3ImageImportの入力として使う.
(3) その他すべての要素の場合は,デフォルトインポータを呼び出す.
(1) "Header"要素か"Graphics"要素の場合は,対応する条件付きインポータを呼び出す.
(2) "Image"要素の場合は,デフォルトインポータをまず呼び出してからその出力をMyFormat3`MyFormat3ImageImportの入力として使う.
(3) その他すべての要素の場合は,デフォルトインポータを呼び出す.
MyFormat3を使ったインポート
RegisterImportのオプション
"FunctionChannels"と"BinaryFormat"
上の例では低レベル関数は引数としてファイル名を取り,そのファイルへのストリームを開く.RegisterImportのオプションとして"FunctionChannels"->{"Streams"}を指定することにより,フレームワークはInputStreamを低レベル関数に直接渡すことができる.
オプション"BinaryFormat"->Trueを指定すると,フレームワークはバイナリストリームを低レベルインポータに渡す.
例
ImportExport`RegisterImport["format",eFunc,{},"FunctionChannels"->{"Streams"}]として登録された形式では,eFunc のシグネチャは eFunc[strm_InputStream,opts___]であり,フレームワークは eFunc に(非バイナリ)ストリームを渡す.
"AvailableElements"
条件付きインポータとしてもポストインポータとしても明示的に登録されていない要素をインポートする場合,デフォルトではフレームワークはデフォルトインポータを評価する.デフォルトインポータにマッチする要素が見付からない場合は,フレームワークはエラーメッセージを出力し,$Failedを返す.
指定されたリストに存在しない要素のインポートを試みる場合,オプション"AvailableElements"->{elem1,elem2,…}を指定すると,フレームワークは直接$Failedを返し,低レベルインポータを呼ばずにエラーメッセージを出力する.
例
ImportExport`RegisterImport["format",{"elem1":>eFunc1,"elem2":>eFunc2,eDefaultFunc},{},"AvailableElements"->{"elem1","elem2","Data"}]
"AvailableElements"->{"elem1","Data"}と指定するのは誤りである.この場合,"elem2"が"AvailableElements"により指定されたリストではないため,Import[filename,{"format","elem2"}]は$Failedを返す.
"DefaultElement"
"Sources"
オプション"Sources"->{path1,path2,…}は.mファイル,.mxファイル,低レベル関数の定義を含むWolfram Symbolic Transfer Protocol (WSTP) .exeファイルへのファイルパスを指定するために使うことができる.フレームワークはソースファイルに応じてGetあるいはInstallを自動的に使い分ける.
Wolfram言語では,ファイル形式のコンバータを実装し,Wolfram言語のImportとExportフレームワークと統合させることのできる機能が提供されている.形式コンバータを実装し,Exportを使ってカスタマイズされた形式からデータをエキスポートすることができる.
Exportと低レベルのコンバータ関数との間のインターフェースは,RegisterExport(ImportExport`コンテキストにある)で指定される.基本的にRegisterExportは,Wolfram言語式をあるファイル形式にエキスポートするときのさまざまな関数の呼出し方をImportとExportフレームワークに伝える.
Wolfram言語にはさまざまなコンバータのソースコードも含まれている.これらはフォルダ$InstallationDirectory/SystemFiles/Formats/format にある.ここで format はBDF,DIF,MTP,SMILES,SurferGrid,TGF,TLEのいずれかを指す.登録コードはファイルImport.mおよび/またはExport.mにあり,コンバータのソースはConverter.mというファイルにある.
形式登録
コンバータ関数を書く
この例では,各コードがシングルスペースで区切られた,各文字のASCIIコードによるASCII文字列を符号化するファイル形式を想定する.この形式のコンバータ関数はRegisterExportを使ってImportとExportフレームワークに加えることができる.
Export[file.ext,"str","MyExportFormat"]を使うと,フレームワークは出力ファイルの名前とデータ str をエキスポータに渡すので,エキスポータ関数の例は次のように書くことができる.
コンバータ関数の要素とオプション
常に要素をインポートするImportとは異なり,Exportは式(上記の例題を参照)や規則のリストを elementName->elementValue という形式で直接エキスポートすることができる.
要素はオプションとして指定することができる,つまり,要素は他のオプションすべてとともに常にコンバータ関数に渡されるのである.ここで,要素およびオプションの取り扱いを説明するために,自明のコンバータを示す.
自動ロードと手動ロード
手動ロード
自動ロード
1. $UserBaseDirectory/SystemFiles/Formatsというディレクトリがない場合は,これを作成する.
2. $UserBaseDirectory/SystemFiles/Formatsの中に format という名前のディレクトリを作成する.ここで format というのは自動ロードする形式名である.
5. ファイルが揃ったら,Wolfram言語を起動したときに$ImportFormatsにエントリ"MyFormat1"が含まれ,Import[ file,{"MyFormat1","Header"}]が適切に評価される.
実際,Wolfram言語でサポートされるファイル形式はすべてこの自動ロードメカニズムを使って登録されており,形式登録は$InstallationDirectory/SystemFiles/Formatsにある.
登録メカニズムの詳細
ディレクトリ名は形式名と一致していなければならない
ソースファイルが標準の場所にない場合は,明示的に"Sources"を指定しなければならない
自動ロードメカニズムを使う場合,Import/Exportフレームワークはソースファイルが$UserBaseDirectory/SystemFiles/Formats/format/Converter.mか$BaseDirectory/SystemFiles/Formats/format/Converter.mにあるものと想定する.ソースファイルが別の場所にある場合は,"Sources"->{"MyFormatConverter/Converter.m","MyFormatConverter/Converter2.m" }のように"Sources"オプションを使って明示的に宣言しなければならない.
コンフリクトの解決
コンフリクトがある(例えば"MyFormat"ディレクトリが$InstallationDirectory/SystemFiles/Formatsの中にも$UserBaseDirectory/SystemFiles/Formatsの中にもある)場合,$UserBaseDirectoryの登録が最優先され,次に$BaseDirectoryと$InstallationDirectoryの登録が使われる.
形式エイリアスの定義
ある形式をいくつかの別の名前で参照できるよう,形式のエイリアスを定義しておくと便利なことがよくある.例えば,"MyFormat1"のエイリアスとして"MyOtherFormat"と"MyDefaultFormat"が使いたい場合,下のような内容を持つファイル$UserBaseDirectory/SystemFiles/Formats/FormatMappings.mを作るとよい.
Wolframシステムのノートブックは,技術文書を作成するための優れた環境を提供している.しかし,特に,ノートブックにあるWolfram言語式を既存のTeX文書に組み合せて使いたい場合は,TeXFormを使い,それらをTeXの入力として適切な形に変換することができる.
TeXForm[expr] | TeXの形式で式 expr を出力する |
ToExpression["input",TeXForm] | TeXをWolfram言語に変換 |
ノートブック用フロントエンドは,個々の式をTeXに変換できるだけでなく,ノートブック全体をTeXに変換する機能も備えている.この機能は通常,ノートブックフロントエンドのファイル ▶ 別名で保存...メニューからアクセスできる.
Export["file.html",nb] | ノートブック nb をHTML形式で保存する |
ExportにはHTMLのエキスポートに適用することのできるオプションが多数あり,Webのブラウザの特徴に合わせて変換方法を指定することができる.
MathMLForm[expr] | expr をMathML形式で出力する |
MathMLForm[StandardForm[expr]] | 伝統的な数学表記ではなくStandardFormを使う |
ToExpression["string",MathMLForm] | MathMLの文字列をWolfram言語の入力として解釈する |
MathMLをWolframシステムのノートブックにペーストすると,Wolframシステムはこれを自動的にWolfram言語の入力に変換しようとする.ノートブックフロントエンドの形式を選択してコピーを使って式をMathMLとしてノートブックからコピーすることもできる.
Export["file.xml",expr] | XML形式でエキスポート |
Import["file.xml"] | XMLからインポート |
ImportString["string","XML"] | XML文字列からデータをインポート |
Wolfram言語式と同じようにXMLもデータを表現する一般的な形式である.Wolfram言語は自動的に特定のタイプの式を特定のタイプのXMLに変換したり,その逆を行ったりする.MathMLはその一例である.別の例として,グラフィックスに対応するSVGがある.
Wolfram言語に一般的なXMLをインポートするように指示すると,Wolfram言語はSymbolicXML式を作成する.<elem attr='val'>data</elem>という形の各XML要素はXMLElement["elem",{"attr"->"val"},{data}]という形式のWolfram言語のSymbolicXML式に変換される.XMLをSymbolicXMLとしてインポートしたら,Wolfram言語の強力な記号プログラミング機能を使ってその式を操作することができる.結果はExportを使ってXML形式でエキスポートできる.