Go (Golang) में CSV के साथ कार्य: पूर्ण गाइड
\n\nCSV (Comma-Separated Values) — सारणीबद्ध डेटा के आदान-प्रदान के लिए सबसे सामान्य प्रारूपों में से एक है। Go (Golang) भाषा में, CSV के साथ कार्य मानक पैकेज encoding/csv के माध्यम से व्यवस्थित किया जाता है। यह CSV फ़ाइलों को पढ़ने और लिखने के लिए एक सुविधाजनक और कुशल इंटरफ़ेस प्रदान करता है, विभाजकों के कॉन्फ़िगरेशन, वर्णों के एस्केपिंग और त्रुटि प्रबंधन का समर्थन करता है।
इस लेख में, हम व्यावहारिक उदाहरणों के साथ encoding/csv पैकेज की सभी क्षमताओं का विस्तार से विश्लेषण करेंगे। आप सीखेंगे कि CSV फ़ाइलों को पंक्ति दर पंक्ति और पूरी तरह से कैसे पढ़ें, डेटा कैसे लिखें, पार्सिंग पैरामीटर कैसे कॉन्फ़िगर करें और सामान्य त्रुटियों को कैसे संभालें।
स्थापना और आयात
\n\nपैकेज encoding/csv Go की मानक लाइब्रेरी का हिस्सा है, इसलिए अतिरिक्त स्थापना की आवश्यकता नहीं है। उपयोग के लिए, इसे अपने कोड में आयात करना पर्याप्त है:
import (\n "encoding/csv"\n "fmt"\n "os"\n)\n\nCSV फ़ाइलें पढ़ना
\n\nCSV पढ़ने का सबसे सरल तरीका csv.NewReader और ReadAll विधि का उपयोग करना है, जो सभी रिकॉर्ड को स्ट्रिंग्स के स्लाइस के स्लाइस के रूप में लौटाता है।
func readAllExample(filename string) {\n file, err := os.Open(filename)\n if err != nil {\n panic(err)\n }\n defer file.Close()\n\n reader := csv.NewReader(file)\n records, err := reader.ReadAll()\n if err != nil {\n panic(err)\n }\n\n for _, record := range records {\n fmt.Println(record)\n }\n}\n\nबड़ी फ़ाइलों के लिए, पूरी फ़ाइल को मेमोरी में लोड करने से बचने के लिए Read विधि के माध्यम से पंक्ति दर पंक्ति पढ़ना बेहतर है:
func readLineByLine(filename string) {\n file, err := os.Open(filename)\n if err != nil {\n panic(err)\n }\n defer file.Close()\n\n reader := csv.NewReader(file)\n reader.LazyQuotes = true // उद्धरणों के सख्त पार्सिंग की अनुमति देता है\n\n for {\n record, err := reader.Read()\n if err != nil {\n break // फ़ाइल का अंत या त्रुटि\n }\n fmt.Println(record)\n }\n}\n\nCSV फ़ाइलें लिखना
\n\nडेटा लिखने के लिए csv.NewWriter का उपयोग किया जाता है। Write विधि एक रिकॉर्ड लिखती है, और WriteAll एक साथ सभी रिकॉर्ड लिखता है। बफ़र को फ्लश करने के लिए Flush() को कॉल करना न भूलें।
func writeExample(filename string) {\n file, err := os.Create(filename)\n if err != nil {\n panic(err)\n }\n defer file.Close()\n\n writer := csv.NewWriter(file)\n defer writer.Flush()\n\n data := [][]string{\n {"नाम", "आयु", "शहर"},\n {"अन्ना", "28", "मॉस्को"},\n {"इवान", "35", "सेंट पीटर्सबर्ग"},\n }\n\n for _, record := range data {\n if err := writer.Write(record); err != nil {\n panic(err)\n }\n }\n}\n\nविभाजक और एस्केपिंग का कॉन्फ़िगरेशन
\n\nडिफ़ॉल्ट रूप से, encoding/csv विभाजक के रूप में अल्पविराम और एस्केपिंग के लिए दोहरे उद्धरण चिह्नों का उपयोग करता है। आप Reader और Writer संरचनाओं के फ़ील्ड के माध्यम से इन सेटिंग्स को बदल सकते हैं:
func customSettings() {\n // TSV (Tab-Separated Values) पढ़ना\n file, _ := os.Open("data.tsv")\n defer file.Close()\n\n reader := csv.NewReader(file)\n reader.Comma = '\\t' // अल्पविराम के बजाय टैब\n reader.Comment = '#' // # से शुरू होने वाली पंक्तियों को अनदेखा करें\n\n records, _ := reader.ReadAll()\n fmt.Println(records)\n}\n\nकॉन्फ़िगरेशन के लिए उपयोगी फ़ील्ड:
\n- \n
Comma— विभाजक वर्ण (डिफ़ॉल्ट ',') \n Comment— टिप्पणी वर्ण (इस वर्ण से शुरू होने वाली पंक्तियों को अनदेखा किया जाता है) \n LazyQuotes— उद्धरणों के सख्त पार्सिंग की अनुमति देता है \n TrimLeadingSpace— फ़ील्ड की शुरुआत से रिक्त स्थान हटाता है \n FieldsPerRecord— अपेक्षित संख्या