কম্পিউটার

রুবি দিয়ে কীভাবে CSV ফাইলগুলি পড়তে এবং পার্স করবেন

CSV মানে "কমা-বিচ্ছিন্ন মান"।

এটি একটি সাধারণ ডেটা বিন্যাস যা কমা দ্বারা পৃথক করা মান সহ সারি নিয়ে গঠিত। এটি ডেটা রপ্তানি এবং আমদানির জন্য ব্যবহৃত হয়।

উদাহরণস্বরূপ :

আপনি একটি CSV ফাইল হিসাবে আপনার Gmail পরিচিতিগুলি রপ্তানি করতে পারেন, এবং আপনি একই বিন্যাস ব্যবহার করে সেগুলি আমদানি করতে পারেন৷

একটি CSV ফাইল দেখতে এরকমই হয়৷ :

id,name
1,chocolate
2,bacon
3,apple
4,banana
5,almonds

এখন আপনি কীভাবে রুবি CSV লাইব্রেরি ব্যবহার করবেন তা শিখতে যাচ্ছেন 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 বিকল্পগুলি

আপনার ফাইলে হেডার থাকলে আপনি 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
  • 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! পদ্ধতি।

এটি আরও মেমরি-দক্ষ হতে চলেছে কারণ টেবিলের কোনও অনুলিপি তৈরি করা হয়নি৷

সিএসভি কনভার্টারগুলি কীভাবে ব্যবহার করবেন

আপনি হয়তো লক্ষ্য করেছেন যে আমরা আমাদের id পেয়েছি স্ট্রিং এর অ্যারে হিসাবে কলাম।

যদি আমাদের পূর্ণসংখ্যার প্রয়োজন হয়?

আপনি to_i এ কল করে সেগুলি পেতে পারেন৷ প্রতিটি স্ট্রিং এ…

কিন্তু একটা শর্টকাট আছে!

রুবি 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টি অন্তর্নির্মিত রূপান্তরকারী রয়েছে :

  • পূর্ণসংখ্যা
  • ভাসা
  • সংখ্যাসূচক (ফ্লোট + পূর্ণসংখ্যা)
  • তারিখ
  • তারিখ সময়
  • সমস্ত

তবে আপনি আপনার নিজস্ব কাস্টম রূপান্তরকারীও তৈরি করতে পারেন৷

এখানে কিভাবে :

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

সারাংশ

আপনি রুবিতে CSV ফাইলগুলি পড়তে এবং লিখতে শিখেছেন! আপনি আপনার CSV ডেটা প্রক্রিয়া করার জন্য রূপান্তরকারী এবং বিকল্প রুবি রত্ন সম্পর্কেও শিখেছেন৷

আপনি যদি বড় CSV ফাইলগুলি প্রক্রিয়া করতে চান (> 10MB) আপনি CSV.foreach(file_name) ব্যবহার করতে চাইতে পারেন একটি ব্লক সহ পদ্ধতি। এটি একবারে একটি সারি পড়বে এবং অনেক কম মেমরি ব্যবহার করবে।

অনুগ্রহ করে এই নিবন্ধটি শেয়ার করুন যাতে আরো মানুষ এটি খুঁজে পেতে পারে!


  1. রুবি নির্বাচন পদ্ধতি কিভাবে ব্যবহার করবেন (উদাহরণ সহ)

  2. রুবিতে ফাইলগুলি কীভাবে পড়তে এবং লিখতে হয় (উদাহরণ সহ)

  3. রুবি দিয়ে কীভাবে পার্সার তৈরি করবেন

  4. কীভাবে অন্যদের সাথে OneDrive ফাইল শেয়ার করবেন।