Wolfram Mathematica从多个文件导入数据

时间:2012-04-28 00:36:29

标签: string import wolfram-mathematica

我有很多文件。每个都包含数据。 我很乐意将一个文件导入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" "对象作为文件名/路径。

3 个答案:

答案 0 :(得分:4)

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

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

然后

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

data = Import[#,"Table"]& /@ FileNames["~/math/third_ks/mixed_matrices/*.dat"];

答案 1 :(得分:2)

在没有文件名文件的情况下解决正在发生的事情有点困难。但是,我认为您可以通过在文件名列表上使用Flatten来解决您的问题,使其成为可以传递给String的{​​{1}}个对象的向量。目前,您的列表是一个n * 1矩阵,其中每一行都是Import,其中包含List,而不是String s的向量。

顺便说一下,在这种情况下,您可以使用StringMap)代替/@

答案 2 :(得分: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