「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。現在、コンサルタントの雛になるべく、少しずつ勉強中です(※2024年12月10日改訂)。

MENU

Juliaを基礎からゆっくりと(その12/18)

 \mathrm{R}\mathrm{Python}\mathrm{C}言語関係など覚えたいもの、覚えるべきものはたくさんある一方で、注目が集まっているから、やってみたい。ということでプログラミング言語としての\mathrm{Julia}を学んでいく。

3. Juliaライブラリの使い方

3.2 ファイル入出力

 \mathrm{Julia}でのファイル入出力方法、シリアライズ・デシリアライズの方法、そして\mathrm{XML}\mathrm{JSON}ファイルの取り扱い方法を述べる。

3.2.1 ファイルとストリーム

 \mathrm{Julia}でファイルを扱うには\mathrm{open}関数を用いる。

# open(filename::String, [mode::String]) -> IOStream

file = open(".../test.csv")

readlines(file) # 1行ずつ読み込む

for line in eachline(file)
    println(line)
end

close(file)

################

# openの後に自動的にcloseを呼び出すのにopen(f::Function, args...;kwargs....)がある
open(readlines,".../test.csv")

open(".../test.csv") do f
    for line in eachline(f)
        println(line)
    end
end


mode
概要
詳細
\mathrm{r}
\mathrm{read}
読込
\mathrm{w}
\mathrm{write}
書込
\mathrm{a}
\mathrm{append}
追加書込
\mathrm{r+}
\mathrm{read+write}
読書(指定ファイルが無いとエラー)
\mathrm{w+}
\mathrm{read+write}
読書(指定ファイルが無いと新規作成)
\mathrm{a+}
\mathrm{read+append}
ファイル読込と追加書込
3.2.2 シリアライズとデシリアライズ

 シリアライズとはオブジェクトをバイトストリームに変換する処理を指す。デシリアライズとはバイトストリームをオブジェクトに変換する処理を指す。\mathrm{Julia}では標準モジュールの\mathrm{Serialization}が用意されている。

# serialize(stream::IO, value)
# serialize(filename::String, value)

using Serialization

dict = Dict("a" => 1, "b" => 2)

serialize(".../test2.dat",dict)

deserialize(".../test2.dat")
3.2.3 JLD2

 入出力に関する\mathrm{Julia}の主要パッケージとして、\mathrm{JuliaIO}がある。

using JLD2, FileIO

data = rand(3,2)

save(".../out.jld2", "data", data)

load(".../Desktop/out.jld2")
3.2.4 JSONファイルの入出力

 \mathrm{Julia}では軽量なデータ記述フォーマットである\mathrm{JSON}\mathrm{JSON.jl}で利用できる。

using JSON

JSON.parsefile(".../test.json")
3.2.5 XMLファイルの入出力

 \mathrm{XML}を扱うパッケージには\mathrm{LightXML.jl}\mathrm{EzXML.jl}など複数ある。

3.3 他言語の呼び出し

 \mathrm{Julia}は歴史が浅く成熟したライブラリが少ないため、他言語の成熟したライブラリを用いることも一考の余地がある。

3.3.1 Pythonの呼び出し

 \mathrm{Python}の機能を用いるには\mathrm{PyCall.jl}を用いる。

using PyCall

# Pythonを用いる
pyver = PyCall.pyversion # PythonのVer.
println(pyver)

# pythonのabs関数を用いる
const pyabs = py"abs"

println(pyabs(-1.2)) # PyCallはJuliaのオブジェクトをPythonのオブジェクトに自動的に変更してくれる

# Pythonのモジュールを参照する
const pymath = pyimport("math")

pymath.sin(1.0)
プライバシーポリシー お問い合わせ