Makefile 朱莉娅:我如何在循环中写入和存储文件?

Makefile 朱莉娅:我如何在循环中写入和存储文件?,makefile,julia,Makefile,Julia,我有一个巨大的数据集,我把它分成k个小数据集,其中k=100。我想把这些小数据集存储在不同的文件中。 为了存储我的海量数据集,我使用了以下说明: using JLD, HDF5 X=rand(100000) file = jldopen("path to my file/mydata.jld", "w") # the extension of file is jld so you should add packages JLD and HDF5, Pkg.add("JLD"),

我有一个巨大的数据集,我把它分成k个小数据集,其中k=100。我想把这些小数据集存储在不同的文件中。 为了存储我的海量数据集,我使用了以下说明:

using JLD, HDF5
    X=rand(100000)
    file = jldopen("path to my file/mydata.jld", "w") # the extension of file is jld so you should add packages JLD and HDF5,  Pkg.add("JLD"), Pkg.add("HDF5"),
    write(file, "X", X)  # alternatively, say "@write file A"
    close(file)
知道我将数据集划分为k个子数据集,其中k=100

function get_mini_batch(X)

    mini_batches = round(Int, ceil(X / 100))

            for i=1:mini_batches
                mini_batch = X[((i-1)*100 + 1):min(i*100, end)]
                file= jldopen("/path to my file/mydata.jld", "w")
                write(file, "mini_batch", mini_batch)  # alternatively, say "@write file mini_batch"
                 lose(file)
            end
end
但该函数允许将不同的子数据集存储在一个文件中,该文件在每次迭代时被覆盖

file= jldopen("/path to my file/mydata1.jld", "w")  # at each iteration l want to get files : mydata1, mydata2 ... mydata100
file= jldopen("/path to my file/mydata2.jld", "w")
file= jldopen("/path to my file/mydata3.jld", "w")
file= jldopen("/path to my file/mydata4.jld", "w")
.
.
.
file= jldopen("/path to my file/mydata100.jld", "w")
或者我试过这个程序 函数get_mini_batch(X)

但是我不知道如何在这行代码文件[i]=jldopen(“/path to my file/mydata(i).jld”,“w”)中创建一个变量i=1…100

要创建文件名,可以使用
@sprintf()
。然后可以使用这些字符串将对象写入磁盘

julia> using Printf  # Needed in Julia 1.0.0
julia> @sprintf("myfilename%02.d.jld", 5)
"myfilename05.jld"
循环中的示例:

julia> for i in 1:3
           println(@sprintf("myfilename%03.d.jl", i))
       end
myfilename001.jl
myfilename002.jl
myfilename003.jl

我在这里使用了
%03.d
来演示如何在文件名中添加前导零。这将有助于以后进行排序。

我同意niczky12的观点,即您正在寻找字符串格式。但我个人会这样写:

"/path to my file/mydata$i.jld"
而不是使用
sprintf

例如:

julia> i = 4
4

julia> "/path/mydata$i.jld"
"/path/mydata4.jld"

但是,我如何才能打开一个文件,在里面写入并使用@sprintf()存储它呢?比如:file=jldopen(“我的文件/mydata.jld的路径”,“w”)#文件的扩展名是jld,所以您应该添加jld和HDF5包,Pkg.add(“jld”),Pkg.add(“HDF5”),write(file,“X”,X)#或者说“@write file A”,您可以使用
@spritf
来指定文件名。例如,在您的问题中,第二个代码块替换为:
file=jldopen(/path to my file/mydata.jld),“w”)
file=jldopen(@sprintf(/path to file/mydata%d.jld,i),“w”)
其中
i
是您正在循环的小批量的数量。我的问题与此主题相关。我想创建文件来存储X[P]值。我应该如何解决这个问题?是的,这是一个简单的方法。在这种情况下,我更喜欢使用前导零,因此我使用了
@sprintf
:)
julia> i = 4
4

julia> "/path/mydata$i.jld"
"/path/mydata4.jld"