导出,附加/预置数据和文本到文件中(Mathematica)

时间:2011-09-14 12:34:03

标签: text append export wolfram-mathematica export-to-csv

我将数据从表格“mydata1”以CSV格式导出到“file1.dat”。以下是mathematica代码:

mydata1=TableForm[Flatten[
Table[Table[Table[
                 {xcord, ycord, zcord}, {xcord, 0,50,10}],
                   {ycord,0,50,10}], {zcord, 50, 100, 10}], 2]];

Export["file1.dat",mydata1,"CSV"]

现在我的“file1.dat”看起来像这样:

0,0,50
10,0,50
20,0,50
..
.. and so on

现在我从表“mydata2”(下面给出的代码)中得到了另一组数据。我希望能够将这个表“mydata2”中的数据存储到同一个文件“file1.dat”中。但是在我这样做之前我需要在文件“file1.dat”中写一个文本,例如“下面的数据来自mydata2”。

请注意,两个表格中的数据都需要以CSV格式导出。

mycounter=20
mydata2=TableForm[Flatten[
Table[Table[Table[
                 {++mycounter,xcord, ycord, zcord}, {xcord, 0,50,10}],
                   {ycord,0,50,10}], {zcord, 50, 100, 10}], 2]];

最后我的数据文件“file1.dat”应该如下所示

*Data from data from mydata1
0,0,50
10,0,50
20,0,50
... and so on
*Below data from mydata2
21,0,0,50
22,10,0,50
23,20,0,50
... and so on.

如果你观察到最终的数据文件“file1.dat”应该有来自“mydata1”的数据下面的表“mydata2”,并且之间有一些文字。

注意:我愿意使用扩展名TXT导出数据但以CSV格式导出例如:

Export["file1.txt", mydata1, "CSV"]

我已经使用了“PutAppend”,但它没有给我想要的结果。要么我没有正确使用它,要么它不是我的问题的关键字。

我对出口有很多疑问,但我现在不会问这一切,因为我不想把你们全部搞糊涂。

2 个答案:

答案 0 :(得分:11)

Streams可用于此目的。如果您的目标是在不同时间生成mydata1mydata2,那么您可以执行以下操作。首先,让我们创建包含mydata1的文件:

$stream = OpenWrite["file.dat", BinaryFormat -> True];
WriteString[$stream, "*Data from data from mydata1\n"]
Export[$stream, mydata1, "CSV"]
WriteString[$stream, "\n"]
Close[$stream]

我们可以使用Import验证文件的内容:

In[10]:= Import["file.dat", "Text"]

Out[10]= *Data from data from mydata1
         0,0,50
         10,0,50
         20,0,50
         ...

现在,让我们将mydata2追加到文件的末尾:

$stream = OpenAppend["file.dat", BinaryFormat -> True];
WriteString[$stream, "*Below data from mydata2\n"]
Export[$stream, mydata2, "CSV"]
WriteString[$stream, "\n"]
Close[$stream]

......再次验证:

In[20]:= Import["file.dat", "Text"]

Out[20]= *Data from data from mydata1
         0,0,50
         10,0,50
         20,0,50
         ...
         *Below data from mydata2
         21,0,0,50
         22,10,0,50
         23,20,0,50
         ...

如果需要,还可以同时将mydata1mydata2写入文件:

$stream = OpenWrite["file.dat", BinaryFormat -> True];
WriteString[$stream, "*Data from data from mydata1\n"]
Export[$stream, mydata1, "CSV"]
WriteString[$stream, "\n*Below data from mydata2\n"]
Export[$stream, mydata2, "CSV"]
WriteString[$stream, "\n"]
Close[$stream]

请注意,每次打开流时都会使用BinaryFormat -> True选项。这是通过流写入操作禁用任何自动换行。如果省略此选项,则输出文件中会出现一些不受欢迎的双倍间距。

答案 1 :(得分:3)

也许是这样的:

mydata1 = 
  Flatten[Table[Table[Table[
          {xcord, ycord, zcord}, 
          {xcord, 0, 20, 10}], {ycord, 0, 20, 10}], {zcord, 50, 50, 10}], 2];
mycounter = 20
mydata2 = 
  Flatten[Table[Table[Table[
          {++mycounter, xcord, ycord, zcord}, 
          {xcord, 0, 20, 10}], {ycord, 0, 20, 10}], {zcord, 50, 50, 10}], 2];

Export["c:\\test.txt", 
      Join[{"* data1 follows"}, mydata1, {"* data2 follows"}, mydata2], "CSV"]

生成的文件是:

* data1 follows
0,0,50
10,0,50
20,0,50
0,10,50
10,10,50
20,10,50
0,20,50
10,20,50
20,20,50
* data2 follows
21,0,0,50
22,10,0,50
23,20,0,50
24,0,10,50
25,10,10,50
26,20,10,50
27,0,20,50
28,10,20,50
29,20,20,50