3

我有很多文件。每一个都包含数据。我可以很高兴地将一个文件导入 Mathematica。但是有超过500数百个文件。我这样做:

 Import["~/math/third_ks/mixed_matrices/1.dat", "Table"];
 aaaa = %
  (*OUTPUT  - some data, I can access them!*)

我想要的只是制作圆圈(我可以做到),但我无法更改文件名 - 1.dat。我想改变它。

我试图做出这样的解决方案。我生成了部分可能的名称,并将它们写入单独的文件。

Import["~/math/third_ks/mixed_matrices/generate_name_of_files.dat", "Table"];
aaaa = %

输出: {{"~/math/third_ks/mixed_matrices/0.dat"}, \
{"~/math/third_ks/mixed_matrices/1.dat"}, ......

我想做的就是Table[a=Import[aaaa[[i]] ,{i,1,500}]

但该函数Import只接受 String“”对象作为文件名/路径。

4

3 回答 3

4

您可以使用FileNames通常的通配符来收集要导入的数据文件的名称。

然后将Import语句映射到文件名列表上。

data然后将包含一个列表,该列表包含来自每个文件的数据作为单独的元素。

data = Import[#,"Table"]& /@ FileNames["~/math/third_ks/mixed_matrices/*.dat"];
于 2012-04-28T09:37:22.583 回答
2

如果没有文件名文件,很难弄清楚发生了什么。但是,我认为您可以通过使用Flatten文件名列表使其成为String可以传递给的对象向量来解决您的问题Import。目前,您的列表是一个 n*1 矩阵,其中每一行是List包含 a 的 a String,而不是Strings 的向量。

顺便说一句,在这种情况下,您可以使用Map( /@) 代替。Table

于 2012-04-28T09:15:33.547 回答
0

谢谢您的答复。
它发生了,所以我同时得到了两个解决方案。
我认为忘记第二种方式是不公平的。

    aaaa = "~/math/third_ks/mixed_matrices/" <> ToString[#] <> ".dat" & /@  Range[0, 116];
   (*This thing generates list of lines  
     Output:
       {"~/math/third_ks/mixed_matrices/0.dat", \
        "~/math/third_ks/mixed_matrices/1.dat", \
        "~/math/third_ks/mixed_matrices/2.dat",    .....etc, until 116

    Table[Import[aaaa[[i]], "Table"], {i, 1, 117}];
    (*and it just imports data from file*)

    bbbb = %;  (*here we have all data, voila!*)

顺便说一句,这不是我的解决方案。这是我的一个朋友所设想的: https ://stackoverflow.com/users/1243244/light-keeper

于 2012-04-28T20:47:36.817 回答