Julia迭代器,用于解析文件中的每一行



我是Julia的新手,遇到了一件我认为应该是常见场景的事情:

我想要一个迭代器,一次解析一行文本文件。因此,与eachline(f)一样,除了函数parse被应用于每一行之外。如果愿意,可以调用结果eachline(parse, f)(就像带有额外函数参数的open版本一样(:将parse映射到eachline上。

更具体地说:我有一个函数poset(s::String),它将偏序集的字符串表示转换为偏序集:

function poset(s::String)
nums = split(s)
...
return transitiveclosure(g)
end

现在我想说一些类似的话

open("posets7.txt") do f
for p in eachline(poset, f)
#something
end
end

(我特别需要它成为一个迭代器:我的文件相当大,所以我真的想一次解析一行(。

在这种情况下,我想我会(个人(使用Iterators.map

open("posets7.txt") do f
for p in Iterators.map(poset, eachline(f))
# do something
end
end

但是,正如文档所指出的(正如您自己所发现的(,这相当于使用生成器表达式:

open("posets7.txt") do f
for p in (poset(x) for x in eachline(f))
# do something
end
end

最新更新