Wolfram Mathematica 多文件导入数据

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 只接受字符串 " " 对象作为文件名/路径。


顺便提一下,有一个专门针对Mathematica的StackExchange网站,网址为http://mathematica.stackexchange.com/。在那里提出问题会得到更快的回答,而且可能会获得更多的赞! - Verbeia
3个回答

4
您可以使用 FileNames 收集您想要导入的数据文件的名称,采用通常的通配符。
然后只需将 Import 语句映射到文件名列表上。 data 将包含一个列表,其中包含每个文件的数据作为单独的元素。
data = Import[#,"Table"]& /@ FileNames["~/math/third_ks/mixed_matrices/*.dat"];

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

顺便提一下,在这种情况下,您可以使用Map/@)而不是Table


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


很高兴你解决了问题 :) 在上面的解决方案中,没有必要建立一个带有索引变量的表格。你所需要做的就是将“/@”导入语句映射到列表aaaa上(实际上你不需要将字符串列表分配给aaaa,只需要映射名字列表即可)。这就是函数式编程比过程式编程更为优越的巧妙之处。不需要跟踪大小的细节。你只需要在列表上映射所需的函数,它就能自动计算出长度 :) - image_doctor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接