ฉันจะเปิดไฟล์ข้อความและอ่านทีละบรรทัดได้อย่างไร มีสองกรณีที่ฉันสนใจในคำตอบสำหรับ:
- รับบรรทัดทั้งหมดในอาร์เรย์พร้อมกัน
- ประมวลผลทีละบรรทัด
สำหรับกรณีที่สองฉันไม่ต้องการเก็บทุกบรรทัดไว้ในหน่วยความจำในคราวเดียว
ฉันจะเปิดไฟล์ข้อความและอ่านทีละบรรทัดได้อย่างไร มีสองกรณีที่ฉันสนใจในคำตอบสำหรับ:
สำหรับกรณีที่สองฉันไม่ต้องการเก็บทุกบรรทัดไว้ในหน่วยความจำในคราวเดียว
คำตอบ:
การอ่านไฟล์ในหน่วยความจำทั้งหมดในครั้งเดียวเนื่องจากอาเรย์ของเส้นเป็นเพียงการเรียกใช้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 ทีละตัวได้อย่างไร