Rust में CSV के साथ काम करना: csv, serde लाइब्रेरीज़ और डेटा का कुशल प्रसंस्करण

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

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

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

Rust में CSV के साथ काम करना: लाइब्रेरीज़, कोड उदाहरण और सर्वोत्तम अभ्यास



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



डिपेंडेंसीज़ इंस्टॉल और कनेक्ट करना



शुरू करने के लिए, Cargo.toml फ़ाइल में निम्नलिखित डिपेंडेंसीज़ जोड़ें:



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


csv लाइब्रेरी पढ़ने और लिखने के लिए लो-लेवल API प्रदान करती है, जबकि serde CSV पंक्तियों को Rust स्ट्रक्चर में ऑटोमैटिक डीसीरियलाइज़ेशन प्रदान करती है।



CSV फ़ाइल को पंक्ति दर पंक्ति पढ़ना



CSV पढ़ने का सबसे सरल तरीका csv क्रेट से Reader का उपयोग करना है। users.csv फ़ाइल के साथ एक उदाहरण देखें:



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

fn main() -> Result<(), Box<dyn Error>> { let mut rdr = Reader::from_path("users.csv")?;

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


यह कोड प्रत्येक पंक्ति को StringRecord स्ट्रिंग्स के वेक्टर के रूप में आउटपुट करता है। हालांकि, व्यवहार में अक्सर टाइप किए गए डेटा के साथ काम करना अधिक आवश्यक होता है।



serde के साथ स्ट्रक्चर में डीसीरियलाइज़ेशन



CSV कॉलम के अनुरूप एक स्ट्रक्चर घोषित करें:



use serde::Deserialize;

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


अब रिकॉर्ड को सीधे User इंस्टेंस में पढ़ा जा सकता है:



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

fn main() -> Result<(), Box<dyn Error>> { let mut rdr = Reader::from_path("users.csv")?;

for result in rdr.deserialize() { let user: User = result?; println!("{} ({} वर्ष) {} से", user.name, user.age, user.city); } Ok(())}


लाइब्रेरी स्वचालित रूप से CSV हेडर को स्ट्रक्चर के फ़ील्ड से मैप करती है। यदि कॉलम का क्रम या नाम भिन्न हैं, तो #[serde(rename = "...")] एट्रीब्यूट का उपयोग करें।



CSV फ़ाइल लिखना



CSV फ़ाइल बनाना Writer के माध्यम से किया जाता है। serde के माध्यम से स्ट्रक्चर्ड डेटा लिखना:



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

#[derive(Debug, Serialize)]struct Product { id: u32, name: String, price: f64,}

fn main() -> Result<(), Box<dyn Error>> { let mut wtr = Writer::from_path("products.csv")?;

let products = vec![ Product { id: 1, name: "लैपटॉप".into(), price: 75000.0 }, Product { id: 2, name: "माउस".into(), price: 1500.0 }, ];

for product in &products { wtr.serialize(product)?; }

wtr.flush()?; println!("products.csv फ़ाइल सफलतापूर्वक लिखी गई"); Ok(())}


ध्यान दें: Writer स्ट्रक्चर के फ़ील्ड नामों के आधार पर स्वचालित रूप से हेडर जोड़ता है।



डिलीमीटर और कोट्स का कॉन्फ़िगरेशन



डिफ़ॉल्ट रूप से कॉमा और डबल कोट्स का उपयोग होता है। यदि आपकी फ़ाइल सेमीकोलन का उपयोग करती है (जैसे, यूरोपीय लोकेल में), तो ReaderBuilder कॉन्फ़िगर करें:



use csv::ReaderBuilder;

let mut rdr = ReaderBuilder::new() .delimiter(b';') .has_headers(true) .from_path("data.tsv")?;


इसी प्रकार, लिखने के लिए WriterBuilder कॉन्फ़िगर किया जाता है।



एरर हैंडलिंग और अमान्य डेटा



अनुशंसाएँ