有没有办法使用Julia';s readdir()?
我有上千个文件名为有没有办法使用Julia';s readdir()?,julia,Julia,我有上千个文件名为LOGS\u A1,LOGS\u A2,LOGS\u A3,…,LOGS\u A16281`,我想按顺序列出这些文件 cwd = pwd() ParentDir = joinpath(cwd,"LOGS_A") dirs = readdir(ParentDir, join=true, sort=true) 但是,它按字母顺序排列条目: LOGS_A999 LOGS_A9990 LOGS_A9991 LOGS_A9992 LOGS_A9993 LOGS_A9
LOGS\u A1
,LOGS\u A2
,LOGS\u A3,…,
LOGS\u A16281`,我想按顺序列出这些文件
cwd = pwd()
ParentDir = joinpath(cwd,"LOGS_A")
dirs = readdir(ParentDir, join=true, sort=true)
但是,它按字母顺序排列条目:
LOGS_A999
LOGS_A9990
LOGS_A9991
LOGS_A9992
LOGS_A9993
LOGS_A9994
LOGS_A9995
LOGS_A9996
LOGS_A9997
LOGS_A9998
LOGS_A9999
有没有办法将其排序,使其从1到16281列出?这是您想要的吗
julia> src = ["LOGS_A1",
"LOGS_A10",
"LOGS_A11",
"LOGS_A2",
"LOGS_A3",
"LOGS_A4",
"LOGS_A5",
"LOGS_A6",
"LOGS_A7",
"LOGS_A8",
"LOGS_A9"];
julia> sort(src, by = x -> parse(Int, chop(x, head=6, tail=0)))
11-element Array{String,1}:
"LOGS_A1"
"LOGS_A2"
"LOGS_A3"
"LOGS_A4"
"LOGS_A5"
"LOGS_A6"
"LOGS_A7"
"LOGS_A8"
"LOGS_A9"
"LOGS_A10"
"LOGS_A11"
我使用了chop
,因为在这种情况下,它看起来很简单,因为我知道你的前缀到处都是一样的
另一种选择是:
julia> src[sortperm(parse.(Int, chop.(src, head=6, tail=0)))]
11-element Array{String,1}:
"LOGS_A1"
"LOGS_A2"
"LOGS_A3"
"LOGS_A4"
"LOGS_A5"
"LOGS_A6"
"LOGS_A7"
"LOGS_A8"
"LOGS_A9"
"LOGS_A10"
"LOGS_A11"
速度稍快,但编写起来更复杂(在您的用例中,速度可能并不重要)。要获得更简单、更可靠的答案,请使用:
julia> using Pkg; pkg"add NaturalSort"
Resolving package versions...
Updating `~/.julia/environments/v1.5/Project.toml`
[c020b1a1] + NaturalSort v1.0.0
Updating `~/.julia/environments/v1.5/Manifest.toml`
[c020b1a1] + NaturalSort v1.0.0
julia> using NaturalSort
[ Info: Precompiling NaturalSort [c020b1a1-e9b0-503a-9c33-f039bfc54a85]
julia> src = ["LOGS_A1","LOGS_A10","LOGS_A11","LOGS_A2","LOGS_A3","LOGS_A4",
"LOGS_A5","LOGS_A6","LOGS_A7","LOGS_A8","LOGS_A9"];
julia> sort(src, lt=natural)
11-element Array{String,1}:
"LOGS_A1"
"LOGS_A2"
"LOGS_A3"
"LOGS_A4"
"LOGS_A5"
"LOGS_A6"
"LOGS_A7"
"LOGS_A8"
"LOGS_A9"
"LOGS_A10"
"LOGS_A11"