Как перебрать папку вложенных папок в Julia? - PullRequest
3 голосов
/ 06 октября 2019

Я пытаюсь написать в Джулии программу, которая будет иметь начальную папку, будет перебирать все подпапки, так что я могу открывать и извлекать содержимое всех файлов в подпапках. Как я могу сделать это в Юлии?

В идеале код допускает неопределенную глубину папки на случай, если я не знаю ее заранее.

Ответы [ 2 ]

8 голосов
/ 06 октября 2019

Вы можете использовать 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
2 голосов
/ 06 октября 2019

Может быть, написать рекурсивную функцию, которая выводит список всех папок и файлов в директории, помещает содержимое каждого файла в массив более высокого уровня, а затем вызывает себя для каждой из папок? Sth like (непроверенный код):

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
...