जूलिया में लाइन से फाइल लाइन कैसे पढ़ें?


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करता है के बराबर है और इसे स्वयं करने की आवश्यकता दुर्लभ है लेकिन यदि आपको आवश्यकता है, तो क्षमता है। चरित्र द्वारा फ़ाइल वर्ण पढ़ने के बारे में अधिक जानकारी के लिए, यह प्रश्न और उत्तर देखें: हम .txt फ़ाइल के चरित्र के माध्यम से पढ़ने के लिए जूलिया का उपयोग कैसे करते हैं, एक समय में एक?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.