读入文件数据

可以读入含有用输入形式给出的 Mathematica 表达式的文件. 但有时还需要读入其它格式的数据文件. 例如,输入含有外部程序产生的、用空格分隔的数据序列. 这些数据不能作为 Mathematica 输入直接读取. 然而,函数 ReadList 可以从文件或输入流取这些数据,并将它们转化为一个 Mathematica 列表.

ReadList["file",Number]从文件中读入数字序列,将它作为 Mathematica 的一个列表

从文件读数字.

这里是一个数字文件.
读入文件中所有数字,返回值是它们的列表.
In[2]:=
Click for copyable input
Out[2]=
ReadList["file",{Number,Number}]从文件读入数字,分别将相继的两个组成列表
ReadList["file",Table[Number,{n}]]分别将相继的 n 个数字的块组成一个列表
ReadList["file",Number,RecordLists->True]
分别将文件中每行的数字组成一个列表

读入数字块.

分别将文件中相继的两个数字组成一个列表.
In[3]:=
Click for copyable input
Out[3]=
分别将文件中的每行组成一个列表.
In[4]:=
Click for copyable input
Out[4]=

ReadList 可以处理Fortran中 "E" 一类记号的数字. 因此,例如, ReadList2.5E+5 读入为 . 注意,ReadList 可以处理任意精度的数字.

这里是含有一个Fortran型 "E" 记号数字的文件.
ReadList 可以处理这一类型的数字.
In[6]:=
Click for copyable input
Out[6]=
ReadList["file",type]读入同一类对象的序列
ReadList["file",type,n]最多读入 n 个对象

读入各种类型的对象.

ReadList 不仅能读入数字,还可以读入其它类型的对象. 对象的类型用 Number 等符号指定.

这是包含文本的一个文件.
这里产生文件中的字符列表,每个元素是单个字符的字符串.
In[8]:=
Click for copyable input
Out[8]=
这里是对应于文件中每一个字节的整数代码.
In[9]:=
Click for copyable input
Out[9]=
这里将文件中每行的数据分别放在一个集合中.
In[10]:=
Click for copyable input
Out[10]=
Byte单字节数据,返回值是一个整数
Character单字符,返回值是单字符字符串
Real用Fortran型记号的近似实数
Number用Fortran记号的精确或近似数
Word按词分离的字符序列
Record按记录分离的字符序列
String用换行结束的字符串
Expression完整的 Mathematica 表达式
Hold[Expression]完整的 Mathematica 表达式,返回值在 Hold

读入的对象类型.

这里返回的是文件 中词的列表.
In[11]:=
Click for copyable input
Out[11]=

ReadList 可以从一个文件读入词. 它将词看作由词定界符分隔的字符串序列. 可以设置选项 WordSeparators 去指定要处理的字符串作为词分隔符. 默认的设置包括空格键和跳格键,但不包括标准的标点符号. 注意,相继词可以用任意数量的词分隔符来分隔. 这些分隔符在 ReadList 的返回值中不作为实际词的任何部分.

选项名
默认值
RecordListsFalse是否在每个记录的对象中形成一个分隔列表
RecordSeparators{"\r\n", "\n","\r"}记录分隔符
WordSeparators{" ","\t"}词分隔符
NullRecordsFalse是否保持零长度的记录
NullWordsFalse是否保持零长度的词
TokenWords{}作为标记的词

ReadList 选项.

将文件 中的文本读入为一系列词,用字母 作为分隔符.
In[12]:=
Click for copyable input
Out[12]=

Mathematica 将任意数据文件看作一个记录 序列. 默认每行是一个独立的记录. 一般,可以设置选项RecordSeparators 去给出记录的分隔符列表. 注意,词不能包含记录分隔符. 与词分隔符相同,在相继的记录间可以有任意多个记录分隔符,这些分隔符不是记录的任何部分.

默认该文件的每行是一个记录.
In[13]:=
Click for copyable input
Out[13]//InputForm=
这是由三个"句子"组成的文件,每句用句号结束.
这里包含的句号和换行都是记录分隔符.
In[15]:=
Click for copyable input
Out[15]=
将每句中的词分布放入几个列表中.
In[16]:=
Click for copyable input
Out[16]=
ReadList["file",Record,RecordSeparators->{}]
将整个文件读入为一个字符串
ReadList["file",Record,RecordSeparators->{{"lsep1",...},{"rsep1",...}}]
给出文件中位于 之间的部分的列表

设置 RecordSeparators 选项.

这里是包括一些文本的文件.
读入文件 中的所有文本,返回值是一个字符串.
In[18]:=
Click for copyable input
Out[18]//InputForm=
给出文件中位于 之间部分的列表.
In[19]:=
Click for copyable input
Out[19]=
通过选择适当的分隔符,可以选出文件中的特定部分.
In[20]:=
Click for copyable input
Out[20]=

Mathematica 允许在相继的记录或词中间使用任意数量的分隔符. 但出现几个分隔符时,有可能会认为在相继的两个分隔符间出现一个空记录或空洞. 这需要设置选项 NullRecords->TrueNullWords->True 来确定.

这里是一个将:作为词分隔符的文件.
这里将重复的:仅作为一个分割符.
In[22]:=
Click for copyable input
Out[22]=
这里认为重复的:中有一个空词.
In[23]:=
Click for copyable input
Out[23]=

在大部分情况下,词用词分隔符分隔,词分隔符本身不作为词. 但有时用标记词来分隔词是方便的,这些标记词本身也是词. 可以设置选项 TokenWords 来给出一个标记词的列表.

这里是一些文本.
这里读入文本,用给定的标记词来分隔文本中的词.
In[25]:=
Click for copyable input
Out[25]=

可以用 ReadList 从文件读入 Mathematica 表达式. 尽管一个表达式可以持续多行,但一般情况下,一个表达式用换行结束.

这是一个包括文本的文件,可用作 Mathematica 的输入.
这里将 中的文本读入为 Mathematica 表达式.
In[27]:=
Click for copyable input
Out[27]=
这里禁止对表达式进行计算.
In[28]:=
Click for copyable input
Out[28]=

ReadList 可以将读入的对象插入任何 Mathematica 表达式中. ReadList 的第二个变量可以是包含指定读入对象的 NumberWord 等表达式. 因此,例如,ReadList["file", {Number, Number}] 将读入的相继数对插入到列表中. 同样,ReadList["file", Hold[Expression]] 将读入的表达式放在 Hold 内.

ReadList 在读入所指定的一组对象还未结束前就到达文件末尾,它就在还没有读入的对象处插入特殊符号EndOfFile.

这是一个数字文件.
在到达文件结束之后,符号 EndOfFile 出现在所需数字的位置.
In[30]:=
Click for copyable input
Out[30]=
ReadList["!command",type]执行一个命令,读入它的输出
ReadList[stream,type]读任何输入流

从流和命令中读入.

执行Unix命令 ,将其输出读入一个字符串.
In[31]:=
Click for copyable input
Out[31]=
OpenRead["file"]打开一个要读入的文件
OpenRead["!command"]打开一个输入管道
Read[stream,type]从流中读一个有指定类型的对象
Skip[stream,type]跳过输入流中具有指定类型的一个对象
Skip[stream,type,n]跳过输入流中具有指定类型的 n 个对象
Close[stream]关闭一个输入流

读输入流的函数.

ReadList 可以读文件或输入流中的所有 数据. 有时候,每次仅需要读入一块数据,可能要由此确定下一次所需数据的类型.

当从文件读入单个数据块时,Mathematica 总是记录文件中的"当前点". 调用 OpenRead 时,Mathematica 由文件建立一个输入流,将当前点放在文件开头. 用 Read 从文件读入一个对象时,Mathematica 就将当前点放在刚读过的对象之后. 用 Skip 可以使当前点跳过一些对象,而不读入它们.

这里是一个数字文件.
这里由文件打开一个输入流.
In[33]:=
Click for copyable input
Out[33]=
读该文件中的第一个数.
In[34]:=
Click for copyable input
Out[34]=
读入第二对数.
In[35]:=
Click for copyable input
Out[35]=
跳过下一个数.
In[36]:=
Click for copyable input
读入其余的数.
In[37]:=
Click for copyable input
Out[37]=
关闭输入流.
In[38]:=
Click for copyable input
Out[38]=

ReadSkip 中,可以和在ReadList 中一样地使用 WordSeparatorsRecordSeparators .

注意,当读入到文件结束时,Read 就返回符号 EndOfFile.

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