CSV का अर्थ है "कॉमा-सेपरेटेड वैल्यूज़"।
यह एक सामान्य डेटा फॉर्मेट है जिसमें कॉमा से अलग किए गए मानों वाली पंक्तियाँ होती हैं। इसका उपयोग डेटा निर्यात और आयात के लिए किया जाता है।
उदाहरण के लिए:
आप अपने Gmail संपर्कों को CSV फाइल के रूप में निर्यात कर सकते हैं, और आप उन्हें उसी फॉर्मेट का उपयोग करके आयात भी कर सकते हैं।
एक CSV फाइल ऐसी दिखती है:
id,name 1,chocolate 2,bacon 3,apple 4,banana 5,almonds
अब आप Ruby CSV लाइब्रेरी का उपयोग करके CSV फाइलों को पढ़ना और लिखना सीखेंगे।
Ruby CSV पार्सिंग
Ruby एक अंतर्निहित 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 विकल्प
यदि आपकी फाइल में हेडर्स हैं तो आप CSV पार्सर को उनका उपयोग करने के लिए कह सकते हैं।
इस तरह:
table = CSV.parse(File.read("cats.csv"), headers: true)
अब बहु-आयामी सरणी के बजाय आपको एक CSV टेबल ऑब्जेक्ट मिलता है।
यहां विवरण है:
"एक
CSV::TableCSV दस्तावेजों का प्रतिनिधित्व करने के लिए एक दो-आयामी डेटा संरचना है। टेबल्स आपको डेटा के साथ पंक्ति या कॉलम द्वारा काम करने, डेटा में हेरफेर करने, और यहां तक कि परिणामों को वापस CSV में बदलने की अनुमति देते हैं।"
इन टेबल्स में से एक को देखते हुए, आप किसी भी पंक्ति से आवश्यक डेटा प्राप्त कर सकते हैं।
उदाहरण:
table[0]["id"] # "1" table[0]["name"] # "chocolate"
यहां 0 पहली पंक्ति है, id और name कॉलम नाम हैं।
दो टेबल मोड हैं:
- by_col
- by_row
टेबल मोड बदलकर (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! मेथड्स का उपयोग कर सकते हैं।
यह अधिक मेमोरी-कुशल होगा क्योंकि टेबल की कोई कॉपी नहीं बनाई जाती।
CSV कन्वर्टर्स का उपयोग कैसे करें
आपने देखा होगा कि हमें अपना id कॉलम स्ट्रिंग्स की सरणी के रूप में मिला।
क्या होगा अगर हमें इंटीजर्स चाहिए?
आप प्रत्येक स्ट्रिंग पर to_i कॉल करके उन्हें प्राप्त कर सकते हैं...
लेकिन एक शॉर्टकट है!
Ruby CSV लाइब्रेरी कन्वर्टर्स नामक कुछ लागू करती है।
एक कन्वर्टर आपके लिए स्वचालित रूप से मानों को बदल देगा।
उदाहरण के लिए:
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 अंतर्निहित कन्वर्टर्स हैं:
- Integer
- Float
- Numeric (Float + Integer)
- Date
- DateTime
- All
लेकिन आप अपने स्वयं के कस्टम कन्वर्टर्स भी बना सकते हैं।
यहां कैसे:
CSV::Converters[:symbol] = ->(value) { value.to_sym rescue value }
आप अपने नए कन्वर्टर का उपयोग इस तरह कर सकते हैं:
CSV.parse("a,b,c", headers: false, converters: :symbol) # [[:a, :b, :c]]
नई CSV फाइल कैसे बनाएं
CSV फाइलों को विभिन्न तरीकों से पार्स और पढ़ने में सक्षम होने के अलावा आप स्क्रैच से 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 जेम्स और प्रदर्शन
अंतर्निहित लाइब्रेरी ठीक है और काम पूरा कर देगी।
लेकिन आप विभिन्न सुविधाओं के साथ कुछ CSV पार्सिंग जेम्स भी पा सकते हैं।
उदाहरण के लिए, smarter_csv जेम आपके 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
सारांश
आपने Ruby में CSV फाइलों को पढ़ना और लिखना सीखा! आपने कन्वर्टर्स और अपने CSV डेटा को प्रोसेस करने के लिए वैकल्पिक Ruby जेम्स के बारे में भी सीखा।
यदि आप बड़ी CSV फाइलों को प्रोसेस करना चाहते हैं (> 10MB) तो आप ब्लॉक के साथ CSV.foreach(file_name) मेथड का उपयोग करना चाह सकते हैं। यह एक समय में एक पंक्ति पढ़ेगा और बहुत कम मेमोरी का उपयोग करेगा।
कृपया इस लेख को साझा करें ताकि अधिक लोग इसे ढूंढ सकें!