我有很多文件。每个都包含数据。 我很乐意将一个文件导入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
" "对象作为文件名/路径。
答案 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的向量。
顺便说一下,在这种情况下,您可以使用String
(Map
)代替/@
。
答案 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