Rust में CSV के साथ कार्य: csv लाइब्रेरी और व्यावहारिक उदाहरण

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Rust में CSV-फ़ाइलों के साथ कार्य के लिए csv लाइब्रेरी



CSV (Comma-Separated Values) — सारणीबद्ध डेटा संग्रहीत करने के लिए सबसे सामान्य प्रारूपों में से एक है। Rust में CSV के साथ कार्य करने के लिए एक शक्तिशाली, लचीली और उच्च-प्रदर्शन वाली लाइब्रेरी csv मौजूद है, जो BurntSushi (ripgrep और regex के लेखक) के इकोसिस्टम का हिस्सा है। यह न्यूनतम प्रयास और अधिकतम प्रकार सुरक्षा के साथ डेटा को पढ़ने, लिखने, सीरियलाइज़ और डीसीरियलाइज़ करने की अनुमति देती है।



स्थापना

Cargo.toml में निर्भरता जोड़ें:

[dependencies]csv = "1.3"


सीरियलाइज़ेशन/डीसीरियलाइज़ेशन के लिए serde की भी आवश्यकता होगी:

[dependencies]csv = "1.3"serde = { version = "1.0", features = ["derive"] }


लाइब्रेरी की मुख्य क्षमताएँ

  • पढ़ना और लिखना अनुकूलन योग्य विभाजक, उद्धरण और एस्केप वर्णों के साथ।
  • शीर्षकों का स्वचालित प्रबंधन — स्तंभ नामों द्वारा कार्य।
  • सीरियलाइज़ेशन/डीसीरियलाइज़ेशन serde के माध्यम से — CSV पंक्तियों को कड़ाई से टाइप की गई Rust संरचनाओं में परिवर्तित करना।
  • लचीला त्रुटि प्रबंधन — त्रुटियों का स्थान निर्धारण (पंक्ति संख्या, स्तंभ)।
  • स्ट्रीमिंग प्रसंस्करण — पूरे डेटा को मेमोरी में लोड किए बिना बड़ी फ़ाइलों के साथ कार्य।
  • गैर-UTF8 एन्कोडिंग का समर्थन (बाहरी क्रेट के माध्यम से, जैसे encoding)।


CSV-फ़ाइल पढ़ना

CSV पढ़ने का सबसे सरल तरीका Reader और रिकॉर्ड पर इटरेटर का उपयोग करना है।



उदाहरण 1: बिना शीर्षकों के पढ़ना

use csv::ReaderBuilder;use std::error::Error;

fn read_csv_no_headers() -> Result<(), Box<dyn Error>> { let data = "name,age,cityAlice,30,LondonBob,25,Paris"; let mut reader = ReaderBuilder::new() .has_headers(false) .from_reader(data.as_bytes());

for result in reader.records() { let record = result?; println!("{:?}", record); } Ok(())}


उदाहरण 2: शीर्षकों के साथ पढ़ना

use csv::Reader;use std::error::Error;

fn read_csv_with_headers() -> Result<(), Box<dyn Error>> { let data = "name,age,cityAlice,30,LondonBob,25,Paris"; let mut reader = Reader::from_reader(data.as_bytes());

for result in reader.deserialize() { let record: (String, u32, String) = result?; println!("{} is {} years old from {}", record.0, record.1, record.2); } Ok(())}


कड़ाई से टाइपिंग के लिए Serde का उपयोग

सबसे सुविधाजनक तरीका #[derive(Deserialize)] के साथ एनोटेट की गई संरचना को परिभाषित करना है।



use serde::Deserialize;use csv::Reader;use std::error::Error;

#[derive(Debug, Deserialize)]struct Person { name: String, age: u32, city: String,}

fn read_typed_csv() -> Result<(), Box<dyn Error>> { let data = "name,age,cityAlice,30,LondonBob,25,Paris"; let mut reader = Reader::from_reader(data.as_bytes());

for result in reader.deserialize() { let person: Person = result?; println!("{:?}", person); } Ok(())}


यह सुनिश्चित करता है कि डेटा स्वचालित रूप से आवश्यक प्रकारों में परिवर्तित हो जाएगा। यदि, उदाहरण के लिए, age फ़ील्ड में स्ट्रिंग "abc" आती है, तो प्रोग्राम पंक्ति और स्तंभ के संकेत के साथ त्रुटि लौटाएगा।



CSV-फ़ाइल लिखना

लिखने के लिए Writer का उपयोग किया जाता है। आप कच्ची स्ट्रिंग्स और सीरियलाइज़ की गई संरचनाएँ दोनों लिख सकते हैं।



उदाहरण: संरचना के माध्यम से लिखना

use serde::Serialize;use csv::Writer;use std::error::Error;

#[derive(Debug, Serialize)]struct Person { name: String, age: u32, city: String,}

fn write_csv() -> Result<(), Box<dyn

अनुशंसाएँ