Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

रूबी के साथ सीएसवी फाइलों को कैसे पढ़ें और पार्स करें

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) . का उपयोग करना चाह सकते हैं एक ब्लॉक के साथ विधि। यह एक बार में एक पंक्ति पढ़ेगा और बहुत कम मेमोरी का उपयोग करेगा।

कृपया इस लेख को साझा करें ताकि अधिक लोग इसे ढूंढ सकें!


  1. रूबी में फाइलें कैसे पढ़ें और लिखें (उदाहरण के साथ)

    आज आप रूबी में फाइलों को पढ़ना और लिखना सीखेंगे ताकि आप सामग्री को निकाल सकें, नई फाइलें बना सकें और अपनी जरूरत की जानकारी पा सकें! यहां बताया गया है कि हम क्या कवर करने जा रहे हैं : सामग्री 1 रूबी में फ़ाइलें कैसे पढ़ें 2 रूबी में फ़ाइल को कैसे लिखें 3 रूबी फ़ाइल विधियाँ 4 निर्देशिका संचालन 5

  1. रूबी के साथ एक पार्सर कैसे बनाएं

    पार्सिंग स्ट्रिंग्स के एक गुच्छा को समझने और उन्हें किसी ऐसी चीज़ में बदलने की कला है जिसे हम समझ सकते हैं। आप रेगुलर एक्सप्रेशन का उपयोग कर सकते हैं, लेकिन वे हमेशा कार्य के लिए उपयुक्त नहीं होते हैं। उदाहरण के लिए, यह सामान्य ज्ञान है कि नियमित अभिव्यक्तियों के साथ HTML को पार्स करना शायद एक अच्छ

  1. दूसरों के साथ OneDrive फ़ाइलें कैसे साझा करें।

    माइक्रोसॉफ्ट वनड्राइव विंडोज के लिए डिफॉल्ट ऑनलाइन स्टोरेज और सिंकिंग सर्विस है। इसके साथ आने वाली अविश्वसनीय रूप से विस्तृत विशेषताओं के साथ, हमें यह कहने में कोई आपत्ति नहीं है कि यह ऐप अपने लगभग सभी प्रतिस्पर्धियों से बेहतर है। वनड्राइव आपको दस्तावेजों को ऑनलाइन स्टोर करने देता है और आपको वेब ए