줄거리와 텍스트 파일을 생성하는 Julia 코드를 실행하고 있습니다. 해당 코드가있는 동일한 폴더에 "출력"폴더가 있습니다. 첫 번째 실행을 위해 "Plots"및 "Data"하위 폴더가있는 "Run_1"폴더를 만듭니다.
fig_path = @__DIR__
mkdir(fig_path*"/Output/Run_1/")
mkdir(fig_path*"/Output/Run_1/Plots/")
mkdir(fig_path*"/Output/Run_1/Data/")
플로팅 후 그림을 "Plots"에 저장합니다.
fig_name = "test_figure"
savefig(fig_path*"/Output/Run_1/Plots/"*fig_name*".pdf")
출력 파일 ( "output_matrix"에 포함)은 "Data"에 저장됩니다.
outfile_1 = fig_path*"/Output/Run_1/Data/test_data.txt"
open(outfile_1, "w") do f1
writedlm(f1,output_matrix)
end
그러나이 코드를 여러 번 실행하고 싶습니다. 실행될 때마다 "Output"폴더에 새 "Run"폴더를 만들어야합니다. 즉, 첫 번째 실행시에는 Run_1, 두 번째 실행시에는 Run_2 등이됩니다. 이전 실행의 모든 폴더는 삭제되지 않습니다. 각 Run 폴더에는 "Plots"및 "Data"폴더가 있으며, 각 실행의 해당 폴더에 플롯과 데이터를 저장합니다. Julia가 이러한 방식으로 파일 이름을 업데이트하도록하려면 어떻게해야합니까?
이 ispath
함수는 파일 또는 디렉토리가 파일 시스템에 있는지 확인합니다.
Run_1
... 와 같은 명명 규칙을 유지하려면 Run_N
다음과 같은 것이 도움이 될 수 있습니다.
function mk_output_dir()
i = 1
while true
dir_name = joinpath(@__DIR__, "Output", "run_$i")
if !ispath(dir_name)
mkpath(dir_name)
return dir_name
end
i += 1
end
end
이것은 다음을 생성합니다.
# First run
julia> top_dir = mk_output_dir()
"/tmp/Output/run_1"
julia> mkdir(joinpath(top_dir, "Plots"))
"/tmp/Output/run_1/Plots"
julia> mkdir(joinpath(top_dir, "Data"))
"/tmp/Output/run_1/Data"
# Second run
julia> top_dir = mk_output_dir()
"/tmp/Output/run_2"
julia> mkdir(joinpath(top_dir, "Plots"))
"/tmp/Output/run_2/Plots"
julia> mkdir(joinpath(top_dir, "Data"))
"/tmp/Output/run_2/Data"
프로그램의 두 인스턴스를 동시에 시작하면 경쟁 조건이 발생할 수 있습니다.
또는 개인적으로 이와 같은 디렉토리 구조를 만들 때 타임 스탬프와 관련된 명명 규칙을 사용하는 경향이 있습니다. 다음은 최소한의 예입니다.
using Dates
function mk_output_dir()
timestamp = Dates.format(now(), "YYYYmmdd-HHMMSS")
dir_name = joinpath(@__DIR__, "Output", "run_$timestamp")
@assert !ispath(dir_name) "Somebody else already created the directory"
mkpath(dir_name)
return dir_name
end
다음과 같이 생성됩니다.
julia> top_dir = mk_output_dir()
"/tmp/Output/run_20201229-210835"
julia> mkdir(joinpath(top_dir, "Plots"))
"/tmp/Output/run_20201229-210835/Plots"
julia> mkdir(joinpath(top_dir, "Data"))
"/tmp/Output/run_20201229-210835/Data"
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다