Julia Language
вход
Поиск…
Синтаксис
- Readline ()
- readlines ()
- ReadString (STDIN)
- грызть (ул)
- открыть (f, файл)
- eachline (ИО)
- ReadString (файл)
- чтения (файл)
- readcsv (файл)
- readdlm (файл)
параметры
параметр | подробности |
---|---|
chomp(str) | Удалите одну строку из новой строки строки. |
str | Строка для переноса конечной новой строки. Обратите внимание, что строки являются неизменными по соглашению. Эта функция возвращает новую строку. |
open(f, file) | Откройте файл, вызовите функцию и закройте файл позже. |
f | Генерируется функция вызова потока ввода-вывода, открывающего файл. |
file | Путь файла для открытия. |
Чтение строки из стандартного ввода
Поток STDIN
в Julia относится к стандартному вводу . Это может представлять собой пользовательский ввод, для интерактивных программ командной строки или вход из файла или конвейера , который был перенаправлен в программу.
Функция readline
, если не предоставлена никаких аргументов, будет считывать данные из STDIN
до тех пор, пока не встретится STDIN
, или поток STDIN
войдет в состояние конца файла. Эти два случая можно отличить от того, был ли символ \n
прочитан как последний символ:
julia> readline()
some stuff
"some stuff\n"
julia> readline() # Ctrl-D pressed to send EOF signal here
""
Часто для интерактивных программ мы не заботимся о состоянии EOF и просто хотим строку. Например, мы можем запросить пользователя для ввода:
function askname()
print("Enter your name: ")
readline()
end
Однако это не совсем удовлетворительно из-за дополнительной новой строки:
julia> askname()
Enter your name: Julia
"Julia\n"
Функция chomp
доступна для удаления одной строки с новой строки строки. Например:
julia> chomp("Hello, World!")
"Hello, World!"
julia> chomp("Hello, World!\n")
"Hello, World!"
Поэтому мы можем увеличить нашу функцию с помощью chomp
чтобы результат был таким, как ожидалось:
function askname()
print("Enter your name: ")
chomp(readline())
end
который имеет более желательный результат:
julia> askname()
Enter your name: Julia
"Julia"
Иногда мы можем читать как можно больше строк (до тех пор, пока входной поток не войдет в состояние конца файла). Функция readlines
обеспечивает эту возможность.
julia> readlines() # note Ctrl-D is pressed after the last line
A, B, C, D, E, F, G
H, I, J, K, LMNO, P
Q, R, S
T, U, V
W, X
Y, Z
6-element Array{String,1}:
"A, B, C, D, E, F, G\n"
"H, I, J, K, LMNO, P\n"
"Q, R, S\n"
"T, U, V\n"
"W, X\n"
"Y, Z\n"
Еще раз, если нам не нравятся строки новой строки в конце строк, читаемые readlines
, мы можем использовать функцию chomp
для их удаления. На этот раз мы передали функцию chomp
по всему массиву:
julia> chomp.(readlines())
A, B, C, D, E, F, G
H, I, J, K, LMNO, P
Q, R, S
T, U, V
W, X
Y, Z
6-element Array{String,1}:
"A, B, C, D, E, F, G"
"H, I, J, K, LMNO, P"
"Q, R, S"
"T, U, V"
"W, X "
"Y, Z"
В других случаях нам могут не нравиться строки, и они просто хотят читать как можно больше, как одну строку. Функция readstring
выполняет следующее:
julia> readstring(STDIN)
If music be the food of love, play on,
Give me excess of it; that surfeiting,
The appetite may sicken, and so die. # [END OF INPUT]
"If music be the food of love, play on,\nGive me excess of it; that surfeiting,\nThe appetite may sicken, and so die.\n"
( # [END OF INPUT]
не является частью исходного ввода, он добавлен для ясности.)
Обратите внимание, что readstring
должен быть передан аргумент STDIN
.
Чтение номеров со стандартного ввода
Чтение чисел из стандартного ввода представляет собой комбинацию строк чтения и синтаксического анализа таких строк, как числа.
Функция parse
используется для анализа строки в желаемом типе номера:
julia> parse(Int, "17")
17
julia> parse(Float32, "-3e6")
-3.0f6
Формат, ожидаемый в результате parse(T, x)
, похож на, но не совсем то же, что и формат, который Джулия ожидает от числовых литералов :
julia> -00000023
-23
julia> parse(Int, "-00000023")
-23
julia> 0x23 |> Int
35
julia> parse(Int, "0x23")
35
julia> 1_000_000
1000000
julia> parse(Int, "1_000_000")
ERROR: ArgumentError: invalid base 10 digit '_' in "1_000_000"
in tryparse_internal(::Type{Int64}, ::String, ::Int64, ::Int64, ::Int64, ::Bool) at ./parse.jl:88
in parse(::Type{Int64}, ::String) at ./parse.jl:152
Сочетание parse
и readline
функции позволяет читать одно число из строки:
function asknumber()
print("Enter a number: ")
parse(Float64, readline())
end
которая работает так, как ожидалось:
julia> asknumber()
Enter a number: 78.3
78.3
Применяются обычные оговорки о точности с плавающей точкой . Обратите внимание, что parse
может использоваться с BigInt
и BigFloat
для удаления или минимизации потери точности.
Иногда полезно читать более одного номера из той же строки. Как правило, линия может быть разделена пробелом:
function askints()
print("Enter some integers, separated by spaces: ")
[parse(Int, x) for x in split(readline())]
end
который может быть использован следующим образом:
julia> askints()
Enter some integers, separated by spaces: 1 2 3 4
4-element Array{Int64,1}:
1
2
3
4
Чтение данных из файла
Чтение строк или байтов
Файлы можно открывать для чтения с помощью open
функции, которая часто используется вместе с синтаксисом do block :
open("myfile") do f
for (i, line) in enumerate(eachline(f))
print("Line $i: $line")
end
end
Предположим, что myfile
существует, и его содержимое
What's in a name? That which we call a rose
By any other name would smell as sweet.
Затем этот код приведет к следующему результату:
Line 1: What's in a name? That which we call a rose
Line 2: By any other name would smell as sweet.
Обратите внимание, что eachline
является ленивой итерируемой по строкам файла. Предпочтительно readlines
по соображениям производительности.
Поскольку do
блок синтаксис просто синтаксический сахар для анонимных функций, мы можем передать по имени функции для open
тоже:
julia> open(readstring, "myfile")
"What's in a name? That which we call a rose\nBy any other name would smell as sweet.\n"
julia> open(read, "myfile")
84-element Array{UInt8,1}:
0x57
0x68
0x61
0x74
0x27
0x73
0x20
0x69
0x6e
0x20
⋮
0x73
0x20
0x73
0x77
0x65
0x65
0x74
0x2e
0x0a
Функции read
и readstring
предоставляют удобные методы, которые автоматически открывают файл:
julia> readstring("myfile")
"What's in a name? That which we call a rose\nBy any other name would smell as sweet.\n"
Чтение структурированных данных
Предположим, у нас был CSV-файл со следующим содержимым в файле с именем file.csv
:
Make,Model,Price
Foo,2015A,8000
Foo,2015B,14000
Foo,2016A,10000
Foo,2016B,16000
Bar,2016Q,20000
Затем мы можем использовать функцию readcsv
для чтения этих данных в Matrix
:
julia> readcsv("file.csv")
6×3 Array{Any,2}:
"Make" "Model" "Price"
"Foo" "2015A" 8000
"Foo" "2015B" 14000
"Foo" "2016A" 10000
"Foo" "2016B" 16000
"Bar" "2016Q" 20000
Если файл был разделен на закладки, в файле с именем file.tsv
, readdlm
можно использовать функцию delim
аргумент delim
- '\t'
. Более сложные рабочие нагрузки должны использовать пакет CSV.jl.