读写 Mathematica 文件
在外部文件中存储 Mathematica 表达式
用户可以在自己的计算机系统中使用文件存储 Mathematica 的定义和结果. 最一般的方法是把所有东西都存储为Mathematica 输入的普通文本. 用这种方法,在某一计算机系统上运行的 Mathematica 生成的文件可以被任何计算机上运行的 Mathematica 阅读. 此外,这种文件可以由其它标准程序,如文本编辑器进行处理.
| <<file 或Get["file"] | 从 Mathematica 输入文件中读取,并返回文件中的最后的表达式 |
| FilePrint["file"] | 显示文件的内容 |
| expr>>file 或Put[expr,"file"] | 把表达式输出到作为普通文本的文件 |
| expr>>>file 或PutAppend[expr,"file"] | 把表达式添加到文件中 |
读、写文件.
这里展开

,并把结果输出到名为

的文件.
这里是

的内容. 它能直接用作
Mathematica 输入.
这是从

文件中读取,并计算它包含的
Mathematica 输入.
| Out[3]= |  |
这里显示文件

的内容.
| Out[2]= |  |
当
Mathematica 找不到所要文件时,它显示一个信息,并且返回值为
$Failed.
| Out[19]= |  |
用 <<file 读入文件时,Mathematica 返回值为文件中的最后一个表达式. 为了不让此结果显示,可以在文件的最后一个表达式中用分号,或者直接在最后加 Null.
当 Mathematica 读入文件时发现语法错误,它就报告此错误,忽略文件余下的部分,返回值为 $Failed. 但如果语法错误发生在使用 BeginPackage 和其它上下文操作函数的程序包中,Mathematica 就尽量恢复读入程序包以前的状态.
保存多个 Mathematica 表达式
Mathematica 的输入文件可以包含任意数目的表达式. 然而,每个表达式必须从新的一行开始. 它可以占有许多行. 在标准交互式 Mathematica 对话中,当表达式完成后就进行处理. 注意,在一个文件中,与交互式对话不同,可以在任何位置插入一个空行,这不产生任何影响.
用
时,Mathematica 把新表达式加在文件之后. 而用
时,Mathematica 清除文件中所有内容,然后把 expr 写入文件.
将一个表达式写入文件

.
如果用户熟悉命令行操作系统,则会认出 Mathematica 重定向算符
,
和
与命令行算符
,
和
是相似的.
用不同形式保存 Mathematica 表达式
当用
或
向文件写入表达式时,这些表达式一般是 Mathematica 用输入形式,以便再将他们读入 Mathematica. 然而,有时需要用别的形式保存表达式. 这可以通过将这些表达式包含在 OutputForm 等格式指令中来实现.
这里按输出形式将一个表达式写入文件

.
此时

文件中的表达式是输出形式.
保存 Mathematica 对象的定义
使用文件的最常用的目的是保存 Mathematica 对象的定义,以便在随后的 Mathematica 对话中再读入它们. 算符
和
将 Mathematica 表达式保存在文件中. 也可以使用函数 Save 按适当的形式取保存 Mathematica 对象的完整定义,以便在随后的 Mathematica 对话中执行.
| Save["file",symbol] | 将一个符号的完整定义存入一个文件 |
| Save["file","form"] | 保存符号名与字符串模式 form 匹配的定义 |
| Save["file","context`"] | 保存指定上下文中所有符号的定义 |
| Save["file",{object1,object2,...}] | 保存一些对象的定义 |
在普通文本中保存定义.
给符号

指定一个值.
| Out[51]= |  |
这是在文件中保存的

的定义.
这里定义了与以前给出的符号

有关的函数

.
这里将

的完整定义存入一个文件.
该文件不仅包含了

本身的定义,也有

所依赖符号

的定义.
这里清除

和

的定义.
通过从文件

中读取可重新使用保存的定义.
| Out[58]= |  |
函数 Save 利用输出形式 Definition 和 FullDefinition,它们显示 Mathematica 符号的定义. 有时,直接用这些输出形式是很方便的.
| Out[59]= |  |
| Out[60]= |  |
在 Mathematica 中定义一个对象时,该定义常常依赖于前面定义的其它对象. 如果要在后面的 Mathematica 对话中重新构造这个对象的定义,这就需要保存该定义本身和与它有关的其它对象的定义. 函数 Save 检查要保存的定义,自动地保存与它们有关的定义. 然而,为了不存入太多不必要的内容,Save 不包含属性为 Protected 的符号的定义. 它认为这些符号的定义是内部给出的. 尽管如此,为了照顾这些定义,在一个新的 Mathematica 对话中读入从 Save 产生的输出时,必须保证对象的定义与以前的完全一致.
用代码形式保存 Mathematica 定义
建立 Mathematica 输入文件时,通常文件仅包含可直接阅读和修改的"普通文本". 然而,有时还需要对文件的内容编码,使得它们不能直接阅读和修改,但还要求此文件能调入Mathematica 内. 这可以用 Mathematica 函数 Encode 实现.
| Encode["source","dest"] | 将文件 source 的代码形式写入文件 dest |
| <<dest | 读入一个代码文件 |
| Encode["source","dest","key"] | 用特定键编码 |
| Get["dest","key"] | 读入一个用一个键编码的文件 |
| Encode["source","dest",MachineID->"ID"] | 产生一个仅能在特定ID的机器读入的代码文件 |
产生和读入代码文件.
将表达式按简明文本形式写入文件

.
将文件

的代码形式写入文件

.
这里是代码文件的内容. 能识别的部分仅是在开头的
Mathematica 注解.
即使代码文件,也可以用运算符

读入
Mathematica.
| Out[64]= |  |
| DumpSave["file.mx",symbol] | 按 Mathematica 内部格式保存符号的定义 |
| DumpSave["file.mx","context`"] | 保存上下文中所有符号的定义 |
| DumpSave["file.mx",{object1,object2,...}] | 保存几个符号或上下文的定义 |
| DumpSave["package`",objects] | 按指定名的定义存入一个文件 |
按 Mathematica 内部格式保存定义.
在必须读入很大或很复杂的定义时,按 Mathematica 内部格式保存比按文本保存方便. 这可以用 DumpSave 实现.
按
Mathematica 内部格式保存

的定义.
| Out[22]= |  |
仍可用

去读入这个定义.
当一个文件含有 Mathematica 内部定义时,
能识别它并进行相应的操作. Mathematica 内部格式在不同的计算机系统有细微的差异. 于是在一个计算机上产生的
一般不能在别的计算机上读入.
用 DumpSave["package`", ...] 时,Mathematica 就将定义写到名为
等文件中,其中 system 指明所使用的计算机系统.
| Out[24]= |  |

自动选择名称与所用计算机系统相关的文件.