首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取julia中的列文件

问读取julia中的列文件
EN

Stack Overflow用户
提问于 2019-12-19 03:54:18
回答 3查看 682关注 0票数 1

我不想仅仅为了读取一个包含按列排列的数字数据的文件而在语言中进行大量的截取。在julia 1.1中有没有一种简单的方法可以做到这一点?令人惊讶的是,手册上没有这个简单的任务。在python中,人们会这样做:

代码语言:javascript
复制
def read2col(filename, length):
    data = []
    for line in open(filename,'r'):
        for word in line.split():
            data.append(word)

data = np.reshape(data,(length,2))
data = np.asarray(data, dtype=np.float64)
return data
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-12-19 04:47:11

(未测试)

代码语言:javascript
复制
function read2col(filename, len)
    asfloat64(s) = try x = parse(Float64, s); return x catch; return missing; end
    data = []
    for word in split(read(filename, String), r"\s+")
        push!(data, word)
    end
    data = reshape(data,(len, 2))
    data = asfloat64.(data)
    return data
end

甚至是

代码语言:javascript
复制
asfloat64(s) = try x = parse(Float64, s); return x catch; return missing; end
read2col(fname, len) = asfloat64.(reshape(split(read(fname, String), r"\s+"), (len, 2)))
票数 1
EN

Stack Overflow用户

发布于 2019-12-19 07:27:52

Julia中已经有一个内置的函数可以做到这一点:

代码语言:javascript
复制
using DelimitedFiles
reshape(readdlm("myfilename.txt"),:,2)

让我们试一试:

代码语言:javascript
复制
shell> more file.txt
1 2 3
4 5 6
7 8 9
10 11 12

julia>  reshape(readdlm("file.txt"),:,2)
6×2 Array{Float64,2}:
  1.0   8.0
  4.0  11.0
  7.0   3.0
 10.0   6.0
  2.0   9.0
  5.0  12.0

或者,如果您想要不同的排序,只需使用'转置

代码语言:javascript
复制
julia>  reshape(readdlm("file.txt")',:,2)
6×2 reshape(::LinearAlgebra.Adjoint{Float64,Array{Float64,2}}, 6, 2) with eltype Float64:
 1.0   7.0
 2.0   8.0
 3.0   9.0
 4.0  10.0
 5.0  11.0
 6.0  12.0
票数 4
EN

Stack Overflow用户

发布于 2019-12-19 12:09:03

最懒惰的方法是使用CSV.jl

代码语言:javascript
复制
using CSV
for row in CSV.File("file.txt",delim=' ',ignorerepeated=true)
  println("a=$(row.a), b=$(row.b), c=$(row.c)")
end

delim=',':一个字符或字符串,指示文件中列的分隔方式;如果未提供参数,解析将尝试在文件的前10行检测最一致的分隔符

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59399168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档