Text 将数据和文本导出、追加/前置到文件中(Mathematica)

Text 将数据和文本导出、追加/前置到文件中(Mathematica),text,append,export,wolfram-mathematica,export-to-csv,Text,Append,Export,Wolfram Mathematica,Export To Csv,我正在以CSV格式将表“mydata1”中的数据导出到“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",my

我正在以CSV格式将表“mydata1”中的数据导出到“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"]
我使用了“putpappend”,但它没有给我想要的结果。要么我没有正确地使用它,要么它不是我这类问题的关键字


关于出口,我有很多问题,但我现在不想问所有这些问题,因为我不想把你们都弄糊涂。

也许类似于:

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

流在这方面很有用。如果您的目标是在不同的时间生成
mydata1
mydata2
,那么您可以执行以下操作。首先,让我们创建包含
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
         ...
如果需要,还可以同时将
mydata1
mydata2
写入文件:

$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
选项。这是通过流写入操作禁用任何自动换行插入。如果省略此选项,则输出文件中会出现一些不受欢迎的双空格。

谢谢您的回答,我使用了您的答案,因为它符合我的要求谢谢。这很有帮助!