逐行解析包含Julia数据的文本文件?
我试图读取写入文本文件的张量元素。文件的第一行定义了张量标注。下一行给出了张量值。在Matlab语法中,我能够通过以下代码行实现这一点,但我很难在Julia中编写等效函数。非常感谢您的帮助逐行解析包含Julia数据的文本文件?,julia,Julia,我试图读取写入文本文件的张量元素。文件的第一行定义了张量标注。下一行给出了张量值。在Matlab语法中,我能够通过以下代码行实现这一点,但我很难在Julia中编写等效函数。非常感谢您的帮助 fid=fopen(fname); shape = sscanf(fgetl(fid),'%i'); for j = 1:shape(3) for i = 1:shape(1) A(i,:,j) = str2num(fgets(fid)); end en
fid=fopen(fname);
shape = sscanf(fgetl(fid),'%i');
for j = 1:shape(3)
for i = 1:shape(1)
A(i,:,j) = str2num(fgets(fid));
end
end
fclose(fid);
典型文件的第一行如下所示:
4 4 48
1.00000 0.00000 0.00000 0.00000
0.00000 1.00000 0.00000 0.00000
0.00000 0.00000 1.00000 0.00000
0.00000 0.00000 0.00000 1.00000
-1.00000 0.00000 0.00000 0.00000
0.00000 1.00000 0.00000 0.00000
0.00000 0.00000 -1.00000 0.00000
0.00000 0.00000 0.00000 1.00000
-1.00000 0.00000 0.00000 0.00000
...
正如@colin在他的评论中所说,这样一个文件可以很容易地读入Julia,如下所示:
julia> data, heading = readdlm("/tmp/data.txt", header=true)
(
9x4 Array{Float64,2}:
1.0 0.0 0.0 0.0
0.0 1.0 0.0 0.0
0.0 0.0 1.0 0.0
0.0 0.0 0.0 1.0
-1.0 0.0 0.0 0.0
0.0 1.0 0.0 0.0
0.0 0.0 -1.0 0.0
0.0 0.0 0.0 1.0
-1.0 0.0 0.0 0.0,
1x4 Array{AbstractString,2}:
"4" "4" "48" "")
返回的两个值是float64数组和作为字符串数组的标题行
是否有任何用途?如果您想逐行阅读,可以使用以下方法:
a = open("/path/to/data.txt", "r")
for line in eachline(a)
print(line) ## or whatever else you want to do with the line.
end
close(a)
特别是,类似这样的语法:
LineArray = split(replace(line, "\n", ""), "\t")
可能对你有用。它将(a)删除行尾的换行符,然后(b)将其拆分为一个索引数组,这样您就可以根据元素在行中占据的可预测位置将其拉出
你也可以说:
Header = readline(a);
在打开文件之后,如果您想特别拉出头文件,然后运行上面的循环。或者,您可以在eachline(a)
上使用enumerate()
,然后对枚举的索引执行逻辑(例如,当索引=1时定义标头)
请注意,这比daycaster给出的答案要慢,因此只有当您确实需要额外的灵活性时,才值得使用。如果您能给出希望代码阅读的数据文件的简短示例,对于那些不熟悉Matlab语法的人来说,这将是非常有价值的。好主意!谢谢我不太明白为什么需要逐行解析。在提供的示例中,每行的列数相同,并且所有数据都是数字,那么为什么不能只
readdlm
?