Документация Engee

Чтение и запись данных в различные типы файлов

Цель данной демонстрации – показать основные функции для чтения данных из файлов и записи данных в них.

Структура задания и обработки файлов однотипна: сначала записываем что-то в файл, а потом читаем из него ранее записанные данные.

Для начала объявим общий для всех файлов путь с папкой нашего проекта.

path = "$(@__DIR__)/";

CSV

Выполним запись и чтения в CSV-файл. Для этого нам понадобятся библиотеки CSV и DataFrames.

using CSV, DataFrames
df = DataFrame(rand(10, 10), :auto)
10×10 DataFrame
 Row │ x1        x2        x3         x4         x5         x6         x7      ⋯
     │ Float64   Float64   Float64    Float64    Float64    Float64    Float64 ⋯
─────┼──────────────────────────────────────────────────────────────────────────
   1 │ 0.782691  0.17554   0.219225   0.583233   0.452437   0.911176   0.86707 ⋯
   2 │ 0.676087  0.796517  0.952582   0.0308405  0.917537   0.150331   0.36803
   3 │ 0.291708  0.207226  0.504047   0.681091   0.76736    0.292621   0.05860
   4 │ 0.988417  0.880329  0.234281   0.634055   0.0169464  0.967213   0.64282
   5 │ 0.610994  0.697366  0.0371445  0.310867   0.605903   0.101713   0.29765 ⋯
   6 │ 0.649429  0.98973   0.215706   0.895941   0.065116   0.281971   0.71633
   7 │ 0.988582  0.374247  0.843371   0.654476   0.652337   0.0621881  0.34528
   8 │ 0.174392  0.210649  0.357041   0.671468   0.842705   0.626445   0.69641
   9 │ 0.291343  0.035325  0.0164157  0.138684   0.850454   0.67106    0.97699 ⋯
  10 │ 0.680563  0.687006  0.882647   0.582454   0.374107   0.274518   0.12354
                                                               4 columns omitted
CSV.write(path * "data.csv", df)
"/user/start/examples/base_simulation/reading_and_writing_files/data.csv"
Matrix(CSV.read(path * "data.csv", DataFrame))
10×10 Matrix{Float64}:
 0.782691  0.17554   0.219225   0.583233   …  0.00160441  0.389145   0.112194
 0.676087  0.796517  0.952582   0.0308405     0.697571    0.254551   0.983581
 0.291708  0.207226  0.504047   0.681091      0.958023    0.448821   0.755106
 0.988417  0.880329  0.234281   0.634055      0.438598    0.663057   0.306334
 0.610994  0.697366  0.0371445  0.310867      0.965925    0.0795114  0.112329
 0.649429  0.98973   0.215706   0.895941   …  0.608109    0.645418   0.290919
 0.988582  0.374247  0.843371   0.654476      0.127029    0.83555    0.695415
 0.174392  0.210649  0.357041   0.671468      0.808247    0.968789   0.507406
 0.291343  0.035325  0.0164157  0.138684      0.495211    0.267949   0.522488
 0.680563  0.687006  0.882647   0.582454      0.983522    0.865961   0.312841

TXT

Теперь реализуем запись и чтение в текстовый документ. В данном случае нам не потребуются никакие сторонние библиотеки.

write(path * "data.txt", "Пример")
12
open(io->read(io, String), path * "data.txt")
"Пример"

MAT

Теперь выполним чтение и запись в MAT-файл. Для этого воспользуемся библиотеками MATLAB и MAT. Первая поддерживает синтаксис MATLAB, а вторая упрощает взаимодействие с файлами MATLAB.

using MATLAB, MAT
mat"p = genpath($path); addpath(p);"
a = [1 2 3]
mat"a=$a"
mat"save($path + string('data.mat'),'a')"
b = matopen(path * "data.mat")
read(b, "a")
1×3 Matrix{Int64}:
 1  2  3

JLD2

Теперь рассмотрим JLD2. Это файлы, хранящие в Engee переменные в виде списков.

using FileIO
save(path * "example.jld2", Dict("A" => "test", "B" => 12))
load(path * "example.jld2")
Dict{String, Any} with 2 entries:
  "B" => 12
  "A" => "test"
b = load(path * "example.jld2", "B")
12

Вывод

В данной демонстрации мы рассмотрели возможности создания и чтения основных типов файлов, применяемых в Engee.