我有以下代码:
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)
当我使用具有10 ^ 4或更少行数的sourceFile测试时,它工作正常。但是当sourceFile有大约5 * 10 ^ 6行时,它会在t = replace(t, r"( 1:1\.0+)|(( 1:1\.0+)|(([1-6]:)|((\|user )|(\|))))", "")
失败并显示以下消息
答案 0 :(得分:2)
这个问题已经陈旧,基于旧版Julia。但是,检查这是否适用于最新版本会很有用。我最近在最新的0.5
版本的Julia中对此进行了测试,上面的代码似乎可以正常使用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)
(PS:请注意,readall
现已弃用,而不是readstring
)。