Rust में CSV के साथ काम करना: csv लाइब्रेरी और डेटा प्रोसेसिंग

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

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

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

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

\n\n

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

\n\n

लाइब्रेरी की स्थापना और कनेक्शन

\n\n

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

\n\n
[dependencies]\ncsv = "1.3"
\n\n

csv लाइब्रेरी एन्कोडिंग, कस्टमाइज़ेबल डिलीमीटर और कोट्स के साथ काम करने का समर्थन करती है, साथ ही serde ट्रेट्स के माध्यम से डेटा के सीरियलाइज़ेशन/डीसीरियलाइज़ेशन की सुविधा भी प्रदान करती है।

\n\n

CSV फ़ाइल पढ़ना

\n\n

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

\n\n
use std::error::Error;\nuse csv::ReaderBuilder;\n\nfn main() -> Result<(), Box<dyn Error>> {\n    // सेटिंग्स के साथ एक रीडर बनाएँ\n    let mut rdr = ReaderBuilder::new()\n        .has_headers(true)      // पहली पंक्ति हेडर है\n        .delimiter(b',')        // डिलीमीटर कॉमा है\n        .from_path("users.csv")?;\n\n    // हेडर प्रिंट करें\n    let headers = rdr.headers()?;\n    println!("Headers: {:?}", headers);\n\n    // रिकॉर्ड पर इटरेट करें\n    for result in rdr.records() {\n        let record = result?;\n        println!("{:?}", record);\n    }\n    Ok(())\n}
\n\n

डीसीरियलाइज़ेशन के साथ रिकॉर्ड प्रोसेस करना

\n\n

स्ट्रक्चर्ड डेटा के साथ काम करने के लिए, यूज़र-डिफ़ाइंड स्ट्रक्चर में डीसीरियलाइज़ेशन का उपयोग करना सुविधाजनक है। serde और serde_derive को कनेक्ट करें:

\n\n
[dependencies]\ncsv = "1.3"\nserde = { version = "1.0", features = ["derive"] }
\n\n

अब आप एक स्ट्रक्चर परिभाषित कर सकते हैं और सीधे डेटा पढ़ सकते हैं:

\n\n
use serde::Deserialize;\n\n#[derive(Debug, Deserialize)]\nstruct User {\n    name: String,\n    age: u8,\n    email: String,\n}\n\nfn main() -> Result<(), Box<dyn std::error::Error>> {\n    let mut rdr = csv::Reader::from_path("users.csv")?;\n\n    for result in rdr.deserialize() {\n        let user: User = result?;\n        println!("उपयोगकर्ता: {} ({} वर्ष) - {}", user.name, user.age, user.email);\n    }\n    Ok(())\n}
\n\n

CSV में डेटा लिखना

\n\n

लिखने के लिए csv::Writer का उपयोग किया जाता है। स्ट्रक्चर्ड डेटा लिखने का उदाहरण:

\n\n
use csv::Writer;\nuse serde::Serialize;\n\n#[derive(Debug, Serialize)]\nstruct Product {\n    id: u32,\n    name: String,\n    price: f64,\n    in_stock: bool,\n}\n\nfn main() -> Result<(), Box<dyn std::error::Error>> {\n    let mut wtr = Writer::from_path("products.csv")?;\n\n    // हेडर लिखें\n    wtr.write_record(&["id", "name", "price", "in_stock"])?;\n\n    // सीरियलाइज़ेशन के माध्यम से डेटा लिखें\n    let products = vec![\n        Product { id: 1, name: "लैपटॉप".into(), price: 75000.50, in_stock: true },\n        Product { id: 2, name: "माउस".into(), price: 1500.00, in_stock: false },\n    ];\n\n    for product in &products {\n        wtr.serialize(product)?;\n    }\n\n    wtr.flush()?;\n    println!("डेटा products.csv में लिखा गया");\n    Ok(())\n}
\n\n

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

\n\n

लाइब्रेरी फ़ॉर्मेट को लचीले ढंग से कॉन्फ़िगर करने की अनुमति देती है। उदाहरण के लिए, TSV (टैब डिलीमीटर) के लिए:

\n\n
let mut rdr = csv::ReaderBuilder::new()\n    .delimiter(b'\\t')\n    .flexible(true) // अलग-अलग संख्या में फ़ील्ड की अनुमति दें\n    .quoting(false) // कोट्स बंद करें\n    .from_reader(io::stdin());
\n\n

त्रुटियों और बड़ी फ़ाइलों का प्रबंधन

\n\n

बड़ी CSV फ़ाइलों के साथ काम करते समय प्रदर्शन पर ध्यान देना महत्वपूर्ण है। csv बफ़र्ड रीडिंग का उपयोग करता है और सभी डेटा को मेमोरी में लोड नहीं करता

अनुशंसाएँ