CSV का अर्थ है "अल्पविराम से अलग किए गए मान"।
यह एक सामान्य डेटा प्रारूप है जिसमें अल्पविराम द्वारा अलग किए गए मानों वाली पंक्तियाँ होती हैं। इसका उपयोग डेटा निर्यात और आयात करने के लिए किया जाता है।
उदाहरण के लिए :
आप अपने Gmail संपर्कों को CSV फ़ाइल के रूप में निर्यात कर सकते हैं, और आप उन्हें उसी प्रारूप का उपयोग करके आयात भी कर सकते हैं।
सीएसवी फ़ाइल इस तरह दिखती है :
id,name 1,chocolate 2,bacon 3,apple 4,banana 5,almonds
अब आप सीखेंगे कि रूबी सीएसवी लाइब्रेरी . का उपयोग कैसे करें CSV फ़ाइलें पढ़ने और लिखने के लिए.
रूबी CSV पार्सिंग
रूबी एक अंतर्निहित CSV लाइब्रेरी के साथ आती है।
आप किसी फ़ाइल को सीधे पढ़ सकते हैं :
require 'csv' CSV.read("favorite_foods.csv")
या आप एक स्ट्रिंग को CSV डेटा के साथ पार्स कर सकते हैं :
require 'csv' CSV.parse("1,chocolate\n2,bacon\n3,apple")
नतीजा?
आपको एक द्वि-आयामी सरणी मिलती है जहां प्रत्येक प्रविष्टि तालिका में एक पंक्ति होती है।
ऐसा दिखता है :
[ ["id", "name"], ["1", "chocolate"], ["2", "bacon"], ["3", "apple"], ["4", "banana"], ["5", "almonds"] ]
आप data[1][1]
. जैसे सरणी सूचकांकों का उपयोग कर सकते हैं इस डेटा के साथ काम करने के लिए।
लेकिन एक बेहतर तरीका है!
सीएसवी विकल्प
यदि आपकी फ़ाइल में शीर्षलेख हैं तो आप CSV पार्सर को उनका उपयोग करने के लिए कह सकते हैं।
इसे पसंद करें :
table = CSV.parse(File.read("cats.csv"), headers: true)
अब एक बहु-आयामी सरणी के बजाय आपको एक CSV तालिका ऑब्जेक्ट मिलता है।
यहां विवरण दिया गया है :
<ब्लॉकक्वॉट>
“ए CSV::Table
CSV दस्तावेज़ों का प्रतिनिधित्व करने के लिए एक द्वि-आयामी डेटा संरचना है। तालिकाएं आपको पंक्ति या स्तंभ के आधार पर डेटा के साथ काम करने, डेटा में हेरफेर करने और यहां तक कि परिणामों को वापस CSV में बदलने की अनुमति देती हैं।"
इनमें से किसी एक तालिका को देखते हुए, आप किसी भी पंक्ति से आवश्यक डेटा प्राप्त कर सकते हैं।
उदाहरण :
table[0]["id"] # "1" table[0]["name"] # "chocolate"
यहां 0
पहली पंक्ति है, id
&name
कॉलम नाम हैं।
टेबल के दो तरीके हैं :
- by_col
- द्वारा_पंक्ति
तालिका मोड को बदलकर (row
डिफ़ॉल्ट रूप से) आप डेटा को विभिन्न कोणों से देख सकते हैं।
उदाहरण के लिए :
table.by_col[0] # ["1", "2", "3", "4", "5"] table.by_col[1] # ["chocolate", "bacon", "apple", "banana", "almonds"]
यहां 0
पहला कॉलम है, 1
दूसरा कॉलम है।
ये दो विधियां तालिका की एक प्रति लौटाती हैं ।
यदि आप मूल तालिका में परिवर्तन करना चाहते हैं तो आप by_col!
. का उपयोग कर सकते हैं &by_row!
तरीके।
यह अधिक मेमोरी-कुशल होने जा रहा है क्योंकि तालिका की कोई प्रतिलिपि नहीं बनाई गई है।
सीएसवी कन्वर्टर्स का उपयोग कैसे करें
आपने देखा होगा कि हमें हमारी id
मिल गई है स्ट्रिंग की एक सरणी के रूप में स्तंभ।
क्या होगा यदि हमें पूर्णांकों की आवश्यकता है?
आप उन्हें to_i
. पर कॉल करके प्राप्त कर सकते हैं हर तार पर…
लेकिन एक शॉर्टकट है!
रूबी सीएसवी लाइब्रेरी कन्वर्टर्स . नामक किसी चीज़ को लागू करती है ।
एक कनवर्टर स्वचालित रूप से आपके लिए मूल्यों को बदल देगा।
उदाहरण के लिए :
CSV.parse("1,2,3,4,5") # [["1", "2", "3", "4", "5"]] CSV.parse("1,2,3,4,5", converters: :numeric) # [[1, 2, 3, 4, 5]]
6 अंतर्निर्मित कनवर्टर हैं :
- पूर्णांक
- फ्लोट
- संख्यात्मक (फ्लोट + पूर्णांक)
- तारीख
- दिनांक समय
- सभी
लेकिन आप अपने खुद के कस्टम कन्वर्टर्स भी बना सकते हैं।
यहां बताया गया है :
CSV::Converters[:symbol] = ->(value) { value.to_sym rescue value }
आप अपने नए कनवर्टर का इस तरह उपयोग कर सकते हैं :
CSV.parse("a,b,c", headers: false, converters: :symbol) # [[:a, :b, :c]]
नई CSV फ़ाइल कैसे बनाएं
सीएसवी फाइलों को अलग-अलग तरीकों से पार्स और पढ़ने में सक्षम होने के अलावा आप शुरू से एक सीएसवी भी बना सकते हैं।
यह आसान तरीका है :
cats = [ [:blue, 1], [:white, 2], [:black_and_white, 3] ] cats.map { |c| c.join(",") }.join("\n")
आप generate
. का भी उपयोग कर सकते हैं विधि:
CSV.generate do |csv| csv << [:blue, 1] csv << [:white, 2] csv << [:black_and_white, 3] end
यह डेटा को सही प्रारूप में तैयार करता है।
यदि आप किसी फ़ाइल में लिखना चाहते हैं तो आपको File.write("cats.csv", data)
जैसी किसी चीज़ का उपयोग करना होगा , या इसके बजाय generate
आप open
. का उपयोग कर सकते हैं फ़ाइल नाम और लेखन मोड सक्षम के साथ।
इसे पसंद करें :
CSV.open("cats.csv", "w") do |csv| csv << [:white, 2] end
अब आपके पास एक नई CSV फ़ाइल है!
CSV रत्न और प्रदर्शन
बिल्ट-इन लाइब्रेरी ठीक है और इससे काम हो जाएगा।
लेकिन आप विभिन्न विशेषताओं के साथ कुछ सीएसवी पार्सिंग रत्न भी पा सकते हैं।
उदाहरण के लिए, smarter_csv
जेम आपके सीएसवी डेटा को हैश की एक सरणी में बदल देगा।
उदाहरण :
require 'smarter_csv' IntegerConverter = Object.new def IntegerConverter.convert(value) Integer(value) end SmarterCSV.process('testing.csv', value_converters: { id: IntegerConverter }) # [{:id=>1, :name=>"a"}, {:id=>2, :name=>"b"}, {:id=>3, :name=>"c"}]
यहां एक प्रदर्शन तुलना है :
Comparison: CSV: 112.9 i/s Smarter CSV: 21.7 i/s - 5.21x slower Tabular: 17.3 i/s - 6.52x slower
सारांश
आपने रूबी में CSV फ़ाइलों को पढ़ना और लिखना सीख लिया है! आपने अपने CSV डेटा को संसाधित करने के लिए कन्वर्टर्स और वैकल्पिक रूबी रत्नों के बारे में भी सीखा है।
अगर आप बड़ी CSV फ़ाइलों को संसाधित करना चाहते हैं (> 10MB) आप CSV.foreach(file_name)
. का उपयोग करना चाह सकते हैं एक ब्लॉक के साथ विधि। यह एक बार में एक पंक्ति पढ़ेगा और बहुत कम मेमोरी का उपयोग करेगा।
कृपया इस लेख को साझा करें ताकि अधिक लोग इसे ढूंढ सकें!