Julia에서 파일을 한 줄씩 읽는 방법은 무엇입니까?


18

텍스트 파일을 열고 한 줄씩 읽으려면 어떻게합니까? 내가 관심있는 두 가지 경우가 있습니다.

  1. 한 번에 배열의 모든 줄을 가져옵니다.
  2. 한 번에 한 줄씩 처리하십시오.

두 번째 경우에는 한 번에 모든 줄을 메모리에 보관하고 싶지 않습니다.

답변:


25

행의 배열로 한 번에 메모리에 파일을 읽는 것은 readlines함수를 호출하는 것입니다.

julia> words = readlines("/usr/share/dict/words")
235886-element Array{String,1}:
 "A"
 "a"
 "aa"
 
 "zythum"
 "Zyzomys"
 "Zyzzogeton"

기본적으로 이것은 개행을 버리지 만 유지하려면 키워드 인수를 전달할 수 있습니다 keep=true.

julia> words = readlines("/usr/share/dict/words", keep=true)
235886-element Array{String,1}:
 "A\n"
 "a\n"
 "aa\n"
 
 "zythum\n"
 "Zyzomys\n"
 "Zyzzogeton\n"

이미 열린 파일 객체가 있다면이를 readlines함수에 전달할 수도 있습니다.

julia> open("/usr/share/dict/words") do io
           readline(io) # throw out the first line
           readlines(io)
       end
235885-element Array{String,1}:
 "a"
 "aa"
 "aal"
 
 "zythum"
 "Zyzomys"
 "Zyzzogeton"

이것은 readline열린 I / O 객체에서 한 줄을 읽거나 파일 이름이 주어지면 파일을 열고 첫 번째 줄을 읽는 함수를 보여줍니다 .

julia> readline("/usr/share/dict/words")
"A"

파일 내용을 한 번에 모두로드하지 않으려는 경우 (또는 네트워크 소켓과 같은 스트리밍 데이터를 처리하는 경우)이 eachline함수를 사용하여 한 번에 한 줄씩 생성하는 반복자를 얻을 수 있습니다 .

julia> for word in eachline("/usr/share/dict/words")
           if length(word) >= 24
               println(word)
           end
       end
formaldehydesulphoxylate
pathologicopsychological
scientificophilosophical
tetraiodophenolphthalein
thyroparathyroidectomize

와 같이이 eachline함수 readlines에는 행을 읽을 수있는 열린 파일 핸들이 제공 될 수도 있습니다. 파일을 열고 readline반복해서 호출 하여 "자신의 롤"반복자를 만들 수도 있습니다 .

julia> open("/usr/share/dict/words") do io
           while !eof(io)
               word = readline(io)
               if length(word) >= 24
                   println(word)
               end
           end
       end
formaldehydesulphoxylate
pathologicopsychological
scientificophilosophical
tetraiodophenolphthalein
thyroparathyroidectomize

이것은 eachline당신 을 위해하는 것과 동등하며 직접해야 할 경우는 거의 없지만 필요한 경우 능력이 있습니다. 문자별로 파일을 읽는 방법에 대한 자세한 내용은이 질문과 답변을 참조하십시오. julia를 사용하여 .txt 파일의 각 문자를 한 번에 하나씩 읽는 방법은 무엇입니까?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.