Mathematica 文件操作

             

贡献者: graviton; addis; eve_3000

  • 本词条处于草稿阶段.
  • 本词条存在未完成的内容.

1. 常用环境变量

   除了丰富的标准文件操作外,Wolfram 语言的统一符号(Symbol)架构, 让我们更容易将算法和高级编程应用于许多文件和系统管理任务.此介绍主要参考官方页面:

   其中的关键是:不要直接使用字符串函数硬编码 文件名/文件路径, 这样生成的路径依赖于操作系统,应该使用 Mathematica 提供的文件系统接口.

文件后缀名使用惯例

   GetNeedsImportInstall 等函数读取本地文件时,默认使用的搜索路径为 $Path. 全局变量 $Path 被定义为一个字符串的列表,每个字符串代表一个目录. 每次你要求打开文件时,Wolfram 就依次将这些目录暂时设置为当前工作目录,然后从该目录中尝试寻找你要求的文件. 也就是说,如果两个目录中含有同名的文件,排在前面的目录将遮蔽掉后面的目录,不过你可以通过提供更详细的上层路径来避免歧义. 在 $Path 的典型设置中,当前目录 和你的主目录 ~ 被列在第一位.

常用的目录操作

预定义的环境变量

   Wolfram 系统所使用的绝大多数文件都与操作系统无关.然而,mx.exe 文件与系统有关. 对于这些文件,按照惯例,捆绑上不同计算机系统版本的名称,形式如 name/$SystemID/name

2. 笔记本相关接口

打开笔记本

保存和关闭笔记本

3. 操作文件和目录

绝对路径

文件名与拓展名

组合路径

4. 应用举例:计算包的本地根目录

   假设你有一些相互关联的 MMA 文件组成的工程,它们的根目录为 a. 你也许需要计算工程的根目录,以便于未来将文件夹移动到不同的位置,或者其他操作系统上,并且不影响代码正常运行.

   首先我们需要建立一个锚点,在 a 中新建一个 init.wl 文件.并写入以下代码:

(*定义程序包的根目录*)
$srcRoot=AbsoluteFileName[DirectoryName[
    If[$Notebooks,NotebookFileName[],$InputFileName],1]]
如此,$srcRoot 中将保存项目的根目录位置. 在其他项目文件(.nb, .m, .wl……)中,添加以下代码:
(*本文件的名称*)
$fileName=If[$Notebooks,NotebookFileName[],$InputFileName];
(*查找 init.wl, 导入根目录和常用函数定义*)
Once@Catch@Module[{recurFind,start=1,depMax},
depMax=FileNameDepth[$fileName];(*路径的最大层次*)
(*-------定义递归函数-------*)
recurFind[dep_Integer]:=If[dep<=depMax,
SetDirectory[DirectoryName[$fileName,dep]];
If[FileExistsQ["init.wl"],
(*将你的根目录添加到默认搜索路径*)
Get["init.wl"];PrependTo[$Path,$srcRoot];
Throw["The base directory is : "<>$srcRoot];,
recurFind[dep+1](*如果这一层找不到,就上升一层*)];
ResetDirectory[];(*重设为之前的目录*),
Throw["I cann't find any init.wl in this project"]
];
recurFind[start];
]


致读者: 小时百科一直以来坚持所有内容免费,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择大量广告以及内容付费等。 因此,我们请求广大读者热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 10 元,我们一个星期内就能脱离亏损, 并保证在接下来的一整年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。

         

友情链接: 超理论坛 | ©小时科技 保留一切权利