Go (Golang) में CSV के साथ काम करना: पार्सिंग, लेखन और डेटा प्रोसेसिंग
CSV (Comma-Separated Values) — सारणीबद्ध डेटा के आदान-प्रदान के लिए सबसे सामान्य प्रारूपों में से एक है। Go (Golang) में, CSV के साथ काम मानक पैकेज encoding/csv के माध्यम से मूल रूप से कार्यान्वित किया जाता है, जो इसे एक सुविधाजनक और कुशल उपकरण बनाता है। इस लेख में, हम विस्तार से जानेंगे कि Go में CSV फ़ाइलों को कैसे पढ़ें, बनाएं और प्रोसेस करें, जिसमें बड़े डेटा वॉल्यूम के साथ काम करना, विभाजकों को कॉन्फ़िगर करना और त्रुटियों को संभालना शामिल है।
पैकेज encoding/csv: मूल बातें
पैकेज encoding/csv दो मुख्य प्रकार प्रदान करता है: CSV पढ़ने के लिए Reader और लिखने के लिए Writer। यह मानक CSV नियमों (RFC 4180) का समर्थन करता है और आपको विभाजक, टिप्पणियाँ और कोटेशन हैंडलिंग जैसे पैरामीटर को लचीले ढंग से कॉन्फ़िगर करने की अनुमति देता है।
शुरू करने के लिए, बस पैकेज को इम्पोर्ट करें:
import "encoding/csv"CSV फ़ाइल पढ़ना
आइए CSV फ़ाइल को पंक्ति दर पंक्ति पढ़ने का एक सरल उदाहरण देखें:
package main
import ( "encoding/csv" "fmt" "os")
func main() { // फ़ाइल खोलें file, err := os.Open("data.csv") if err != nil { panic(err) } defer file.Close()
// Reader बनाएं reader := csv.NewReader(file)
// सभी रिकॉर्ड पढ़ें records, err := reader.ReadAll() if err != nil { panic(err) }
// डेटा प्रदर्शित करें for i, record := range records { fmt.Printf("पंक्ति %d: %v", i, record) }}महत्वपूर्ण: ReadAll() पूरी फ़ाइल को मेमोरी में लोड करता है। बड़ी फ़ाइलों के लिए, Read() के माध्यम से पंक्ति-दर-पंक्ति पढ़ने का उपयोग करें।
बड़ी CSV फ़ाइलों को पंक्ति-दर-पंक्ति पढ़ना
बड़े डेटा वॉल्यूम (गीगाबाइट) को प्रोसेस करने के लिए, इटरेटिव रीडिंग का उपयोग करें:
reader := csv.NewReader(file)for { record, err := reader.Read() if err != nil { // फ़ाइल का अंत if err.Error() == "EOF" { break } panic(err) } // रिकॉर्ड प्रोसेस करें fmt.Println(record)}CSV फ़ाइल में लिखना
CSV फ़ाइल बनाना भी सहज है:
package main
import ( "encoding/csv" "os")
func main() { file, err := os.Create("output.csv") if err != nil { panic(err) } defer file.Close()
writer := csv.NewWriter(file) defer writer.Flush() // महत्वपूर्ण: बफ़र फ्लश करें
// हेडर लिखें writer.Write([]string{"नाम", "आयु", "शहर"}) // डेटा लिखें writer.Write([]string{"एलिस", "30", "मॉस्को"}) writer.Write([]string{"बॉब", "25", "सेंट पीटर्सबर्ग"})}सभी लेखन ऑपरेशनों के बाद Flush() को कॉल करना न भूलें, अन्यथा डेटा खो सकता है।
विभाजक और अन्य पैरामीटर कॉन्फ़िगर करना
डिफ़ॉल्ट रूप से अल्पविराम का उपयोग किया जाता है, लेकिन आप विभाजक बदल सकते हैं, उदाहरण के लिए, अर्धविराम (TSV — टैब्यूलेशन) में:
reader := csv.NewReader(file)reader.Comma = ';' // TSV के लिए: '\\t'
// लिखने के लिए:writer := csv.NewWriter(file)writer.Comma = ';'अन्य उपयोगी पैरामीटर:
- LazyQuotes — गैर-मानक स्थानों में कोटेशन की अनुमति देता है (डिफ़ॉल्ट
false) - FieldsPerRecord — फ़ील्ड की संख्या की जाँच (नकारात्मक मान जाँच को अक्षम करता है)
- Comment — टिप्पणी वर्ण (जैसे,
'#'), इससे शुरू होने वाली पंक्तियाँ छोड़ दी जाती हैं - TrimLeadingSpace — फ़ील्ड की शुरुआत से स्वचालित रूप से रिक्त स्थान हटाना
सेटिंग्स के साथ उदाहरण:
reader := csv.NewReader(file)reader.Comma = '\\t'reader.Comment = '#'reader.TrimLeadingSpace = trueत्रुटि प्रबंधन और मान्यता
CSV फ़ाइलों में अक्सर त्रुटियाँ होती हैं: अतिरिक्त कोटेशन, फ़ील्ड की संख्या का बेमेल