我试图用Julia编写一个程序,该程序给定了一个起始文件夹,该程序将遍历所有子文件夹,以便我可以打开并从子文件夹中的所有文件中获取内容。如何在Julia中做到这一点?
理想情况下,如果我不提前知道,该代码将允许未指定的文件夹深度。
答案 0 :(得分:8)
您可以使用walkdir
,如下所示:
for (root, dirs, files) in walkdir("mydir")
operate_on_files(joinpath.(root, files)) # files is a Vector{String}, can be empty
end
https://docs.julialang.org/en/v1/base/file/#Base.Filesystem.walkdir
编辑:这里要做的一件好事是在文件路径数组之间广播,这样您就无需对空数组进行特殊情况处理。
contents = String[]
for (root, dirs, files) in walkdir("mydir")
# global contents # if in REPL
push!.(Ref(contents), read.(joinpath.(root, files), String))
end
答案 1 :(得分:2)
也许编写了一个递归函数,该函数列出了dir中的所有文件夹和文件,将每个文件的内容推送到更高范围的Array,然后在每个文件夹上调用自身? 像(未经测试的代码)一样:
function outerfun(dir)
function innerfun!(dir, filecontents)
for name in readdir(dir)
if isdir(name)
innerfun!(name, filecontents)
else
push!(readlines(name), filecontents)
end
end
end
filecontents = Array{String}[]
innerfun!(dir, filecontents)
filecontents
end