Поиск…


Синтаксис

  • 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"
0.5.0

Еще раз, если нам не нравятся строки новой строки в конце строк, читаемые 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.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow