我有以下代码:
cd(joinpath(homedir(),"Desktop"))
using HDF5
using JLD
# read contents of a file
t = readall("sourceFile")
# remove unnecessary characters
t = replace(t, r"( 1:1\.0+)|(( 1:1\.0+)|(([1-6]:)|((\|user )|(\|))))", "")
# convert string into Float64 array (approximately ~140 columns)
data = readdlm(IOBuffer(t), ' ', char(10))
# save array on the hard drive
save("data.jld", "data", data)
Run Code Online (Sandbox Code Playgroud)
当我使用具有10 ^ 4或更少行数的sourceFile测试它时,它工作正常.但是当sourceFile有大约5*10 ^ 6行时,它会失败,t = replace(t, r"( 1:1\.0+)|(( 1:1\.0+)|(([1-6]:)|((\|user )|(\|))))", "")
并显示以下消息
这个问题很旧,并且基于 Julia 的旧版本。但是,检查这是否适用于最新版本会很有用。我最近在最新版本的 Julia 中对此进行了测试0.5
,上面的代码似乎可以正确处理 5*10^6 行,每行 600 个字符。整个操作在我的笔记本电脑上占用了大约 5G 的峰值内存。
julia> t=[randstring(600) for i=1:5*10^6];
julia> writecsv("/Users/aviks/tmp/long.csv", t)
julia> t=readstring("/Users/aviks/tmp/long.csv");
julia> length(t)
3005000000
julia> @time t = replace(t, r"( 1:1\.0+)|(( 1:1\.0+)|(([1-6]:)|((\|user )|(\|))))", "");
43.599660 seconds (137 allocations: 3.358 GB, 0.85% gc time)
Run Code Online (Sandbox Code Playgroud)
(PS:请注意,readall
现在已弃用,取而代之的是readstring
)。