Làm thế nào để đọc một dòng tập tin theo dòng trong Julia?


18

Làm cách nào để mở tệp văn bản và đọc từng dòng một? Có hai trường hợp khác nhau tôi quan tâm đến câu trả lời cho:

  1. Nhận tất cả các dòng trong một mảng cùng một lúc.
  2. Xử lý từng dòng một tại một thời điểm.

Đối với trường hợp thứ hai, tôi không muốn phải giữ tất cả các dòng trong bộ nhớ cùng một lúc.

Câu trả lời:


25

Đọc tất cả các tệp vào bộ nhớ cùng một lúc vì một mảng các dòng chỉ là một lệnh gọi readlineshàm:

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

Theo mặc định, điều này loại bỏ các dòng mới nhưng nếu bạn muốn giữ chúng, bạn có thể vượt qua đối số từ khóa 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"

Nếu bạn có một đối tượng tệp đã mở, bạn cũng có thể chuyển nó cho readlineshàm:

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"

Điều này thể hiện readlinechức năng, đọc một dòng duy nhất từ ​​một đối tượng I / O đang mở hoặc khi được đặt tên tệp, mở tệp và đọc dòng đầu tiên từ nó:

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

Nếu bạn không muốn tải tất cả nội dung tệp cùng một lúc (hoặc nếu bạn đang xử lý truyền dữ liệu như từ ổ cắm mạng), thì bạn có thể sử dụng eachlinechức năng để có được một trình lặp tạo ra từng dòng một:

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

Các eachlinechức năng có thể, giống như readlines, cũng được đưa ra một tập tin xử lý mở ra để đọc các dòng từ. Bạn cũng có thể "cuộn" trình lặp của riêng mình bằng cách mở tệp và gọi readlineliên tục:

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

Điều này tương đương với những gì eachlinebạn làm và thật hiếm khi cần phải tự làm điều này nhưng nếu bạn cần, khả năng là có. Để biết thêm thông tin về việc đọc một ký tự tệp theo ký tự, hãy xem câu hỏi và câu trả lời này: Làm thế nào để chúng ta sử dụng julia để đọc qua từng ký tự của tệp .txt, mỗi lần một ký tự?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.