命名及查找文件
目录操作
对文件命名的细节随计算机系统的不同而改变,但 Mathematica 提供了所有系统可用的一般机制.
Mathematica 假定文件放置在各种级别的目录 中,要找出一个文件时,Mathematica 不仅要知道文件名,还要知道该文件所在的目录序列.
在任何时刻,有一个当前工作目录 ,要确定一个文件或目录时,就要给出它们相对于该目录的位置. 当要指定该目录中的一个文件时,就不需要给出目录信息,只需给出文件名即可.
目录操作.
| Out[1]= |  |
设置当前工作目录是

子目录.
| Out[2]= |  |
| Out[3]= |  |
| Out[4]= |  |
调用 SetDirectory 时可以给出所用操作系统能识别的任何目录名. 因此,例如,在 Unix 系统中,可以用
指定上一级目录,用
指定主目录.
用 SetDirectory 进入一个目录时,Mathematica 总要提示前一个目录. 可以用 ResetDirectory 返回到前一目录. 一般来说,Mathematica 维持一个由 DirectoryStack[] 给出的目录堆栈. 每次调用 SetDirectory时,就向堆栈中加一个新目录,而每一次调用 ResetDirectory 时就从堆栈中删除一个目录.
特殊目录.
搜索文件
当给出一个文件后,Mathematica 一般要经过几步来找到所需的文件. 第一步是使用所用操作系统或命令解释程序中的标准机理.
Mathematica 检查所给文件的全名,看是否有
、
、
、
、
、
、
和
等通配符. 发现了这些字符时,就将全名送到操作系统或命令解释程序去解释. 这意味着在使用 Unix 系统时,name* 和
等构造就在此处展开. 但一般地,Mathematica 获取操作系统或命令解释程序的结果,并将其作为文件全名.
对输出文件而言,这是Mathematica 进行的最后一个处理. 当 Mathematica 没有找到所指定的文件时,它就产生这个文件.
当从一个文件输入时,Mathematica 要进行另一轮的输入. Mathematica 查看应该搜索的 Path 选项值. Path 选项的默认设置是全局变量 $Path.
| Get["file",Path->{"dir1","dir2",...}] | 得到一个文件,相对于目录 进行搜索 |
| $Path | 相对于输入文件搜索的默认路径列表 |
文件的搜索路径.
一般地,全局变量 $Path 的定义是字符串列表,其中每个字符串代表一个子目录. 每输入一个文件后,Mathematica 就逐个将这些目录临时作为当前工作目录,从其中寻找所给的文件.
这是
$Path 的一个典型设置. 先列出的是当前目录(

)和主目录(

).
| Out[5]= |  |
也可以使用 FindFile 来定位一个文件.
在 $Path 上搜索一个文件.
FindFile 在 $Path 中搜索所有目录,并且返回由 Get、Needs 和其它函数加载的文件的绝对名. FileExistsQ 检验具有给定名的文件是否存在.
| Out[5]= |  |
应用于程序包名称的 FindFile 从该程序包返回 init.m 文件的绝对名称.
| 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 的返回值是对应于文件名的字符串. 当返回到一个在当前目录中的文件时,它给出相对于当前目录的文件名. 请注意,所有文件名的格式适合于产生它们的计算机系统.
这里是当前工作目录中所有结尾为

的文件列表.
| Out[6]= |  |
这里列出了在以

开头的子目录中和当前工作目录中以

开头的文件.
| Out[7]= |  |
提供给 FileNames 的文件名可以使用 Mathematica 的任何字符串模式对象,通常与操作符 ~~ 合起来使用.
这里给出当前工作目录中名称匹配

形式的所有文件.
| Out[3]= |  |
这里仅列出名称具有

形式的文件,其中
d 是一个或多个数字的序列.
| Out[3]= |  |
组成文件名
操作文件名.
应该看到不同计算机系统以不同的方式给出文件名. 因此,例如,微软视窗系统的形式一般是
,而 Unix 的形式是
. 函数 FileNameJoin 根据所用的计算机系统以适当的方式组成文件名.
| Out[8]= |  |
这里构造了

所在目录中另一个文件的全名.
| Out[9]= |  |
操作文件名.
类似 FileNameSplit 和 FileNameJoin 的函数对文件名提供了额外的操作. 它们使用与当前操作系统相匹配的文件名分隔器,并对文件名的分隔做适当的操作. 默认情况下,FileNameJoin 将使用 $PathnameSeparator 来对当前操作系统产生合适的具有规范形式的名称.
当要建立一个相关文件的集合时,当读一个文件时能涉及另一个文件往往是方便的. 全局变量 $InputFileName 给出当前输入的文件名. 用 DirectoryName 和 ToFileName 就可以方便地指定其它相关的文件名.
找出涉及 Mathematica 当前正在读的文件的方法.
在 Mathematica 中处理文件的一个问题是文件和目录名的形式随计算机系统的不同而不同. 这意味着,比如,包含标准Mathematica 程序包的文件的名称可能在不同系统上很不相同. 通过一系列转换,我们可以在所有系统上用同样的命令读入标准 Mathematica 程序包. 这里的工作方式是由每个程序包定义一个形式为
的所谓的 Mathematica 上下文. 在每个系统中,所有文件都根据它们所定义的上下文命名. 那么当用户使用命令
时,Mathematica 自动把上下文的名称翻译成适合用户特定计算机系统的文件名.
标准文件扩展名
| file.m | Mathematica 的普通文本格式的表达式文件 |
| file.nb | Mathematica 笔记本文件 |
| file.mx | Mathematica 的 DumpSave 格式的定义 |
Mathematica 的经典文件名.
如果使用 Mathematica 的笔记本界面,那么 Mathematica 前端可以保存完整的笔记本,不仅包含了 Mathematica 输入和输出,而且包含文本、图形和其他资料.
传统上,Mathematica 笔记本文件名都以 .nb 结尾,而绝大多数 Mathematica 版本强制执行这样的传统.
文件名和扩展名.
可以使用 FileBaseName 和 FileExtension 提取文件名和扩展名.
当在 Mathematica 前端打开一个笔记本,Mathematica 将自动显示笔记本的内容,但是除非明确要求,否则它不会把任何内容发送到内核进行计算.
但是,在一个 Mathematica 笔记本中,可以使用前端的 菜单来识别某些单元为初始单元 ,并且如果这么做的话,这些单元的内容将在打开笔记本的时候自动计算.
单元括号内的
I 表明第二个单元当笔记本被打开的时候,将作为初始单元被计算.
有时候,以包含解释文本的笔记本和包含原始 Mathematica 定义的程序包的形式保持 Mathematica 资料是方便的. 要做到这一点,可以把 Mathematica 定义放入笔记本的初始单元中. 每处保存笔记本,前端将保存一个相关的仅包含原始 Mathematica 定义的 .m 文件.