如何使用julia在文件中写入数据类型

如何使用julia在文件中写入数据类型,julia,Julia,在julia中,我想在一个文件中写一个变量和他的类型,以便以后重用它。像这样: var = Float64(15) stream = open("foo.dat", "w") write(stream, typeof(var)) write(stream, var) close(stream) stream = open("foo.dat", "r") typevar = read(stream, DataType) var = read(stream, typevar) close(stre

在julia中,我想在一个文件中写一个变量和他的类型,以便以后重用它。像这样:

var = Float64(15)
stream = open("foo.dat", "w")
write(stream, typeof(var))
write(stream, var)
close(stream)

stream = open("foo.dat", "r")
typevar = read(stream, DataType)
var = read(stream, typevar)
close(stream)
第三行行不通:

ERROR: LoadError: MethodError: `write` has no method matching write(::IOStream, ::Type{Float64})
Closest candidates are:
write(::IO, ::Any)
我该怎么做?谢谢:)

我最好的方式:

var = Float64(89)
typevar = string(typeof(var), "\n")

s = open("var.dat", "w")
write(s, typevar, var) # Float64\n@V@
close(s)

s = open("var.dat", "r")
typevar = chomp(readline(s)) # delete "\n"
var = read(s, eval(parse(typevar)))
close(s)

由于对文件的格式似乎没有任何强烈的要求,正如许多评论人士在上面所说的,使用JLD包是最好的方法。它将自动跟踪存储在其中的所有内容的类型,因此您可以直接读取这些值

您必须安装带有
Pkg.add(“JLD”)
的软件包。完成后,使用它很简单:

julia> using JLD
INFO: Precompiling module JLD...
INFO: Recompiling stale cache file /Users/aviks/.julia/lib/v0.4/FileIO.ji for module FileIO.

julia> a=10
10

julia> b="A String"
"A String"

julia> c=[1,2]
2-element Array{Int64,1}:
 1
 2

julia> file = jldopen("/tmp/mydata.jld", "w")
Julia data file version 0.1.1: /tmp/mydata.jld

julia> write(file, "a", a)

julia> write(file, "b", b)

julia> write(file, "c", c)

julia> close(file)
然后,当您想要读取变量时,在newrepl会话中

julia> using JLD

julia> d=load("/tmp/mydata.jld")
Dict{ByteString,Any} with 3 entries:
  "c" => [1,2]
  "b" => "A String"
  "a" => 10

julia> d["a"]
10

julia> d["b"]
"A String"

julia> d["c"]
2-element Array{Int64,1}:
 1
 2

有关JLD套件的更多信息,请访问:

您是否查看过JLD套件?您可以使用它来存储完整的Julia对象,其中将包括它们的类型。此外,根据您的需要,这甚至可能不是必需的。例如,如果您只有一个数组,比如说
Float64
对象,那么您可以使用
writedlm
将其写入.txt文件,然后
readdlm
将其读回
readdlm
将采用可选参数来指定读回数据时的类型。谢谢Michael:)我查看JLD和HDF5软件包。writedlm写文本,但我想写二进制。嗯,我不确定这一点,但我不知道如何将文件类型写入规范二进制文件-我怀疑可能没有办法,因为不同语言的文件类型不同,但我很容易出错。不过,作为一种解决方法,您可以在文件开头多写一个表示文件类型的数字或字符,然后保留一个字典,将这些数字或字符映射到文件类型。有点像黑客,但可能会奏效。JLD是正确的解决方案。你有什么错误?