Go में कुशल CSV पढ़ें और लिखें
Go में CSV फ़ाइल को कुशलतापूर्वक पढ़ने और लिखने के कार्य में I/O संचालन को अनुकूलित करना शामिल है . निम्नलिखित कोड स्निपेट पर विचार करें जो CSV फ़ाइल को पढ़ता है, डेटा पर गणना करता है, और परिणामों को एक नई CSV फ़ाइल में लिखता है:
package main
import (
"encoding/csv"
"fmt"
"log"
"os"
"strconv"
)
func ReadRow(r *csv.Reader) (map[string]string, error) {
record, err := r.Read()
if err == io.EOF {
return nil, io.EOF
}
if err != nil {
return nil, err
}
m := make(map[string]string)
for i, v := range record {
m[strconv.Itoa(i)] = v
}
return m, nil
}
func main() {
// load data csv
csvFile, err := os.Open("./path/to/datafile.csv")
if err != nil {
log.Fatal(err)
}
defer csvFile.Close()
// create channel to process rows concurrently
recCh := make(chan map[string]string, 10)
go func() {
defer close(recCh)
r := csv.NewReader(csvFile)
if _, err := r.Read(); err != nil { //read header
log.Fatal(err)
}
for {
rec, err := ReadRow(r)
if err == io.EOF {
return // no more rows to read
}
if err != nil {
log.Fatal(err)
}
recCh <- rec
}
}()
// write results to a new csv
outfile, err := os.Create("./where/to/write/resultsfile.csv"))
if err != nil {
log.Fatal("Unable to open output")
}
defer outfile.Close()
writer := csv.NewWriter(outfile)
for record := range recCh {
time := record["0"]
value := record["1"]
// get float values
floatValue, err := strconv.ParseFloat(value, 64)
if err != nil {
log.Fatal("Record: %v, Error: %v", floatValue, err)
}
// calculate scores; THIS EXTERNAL METHOD CANNOT BE CHANGED
score := calculateStuff(floatValue)
valueString := strconv.FormatFloat(floatValue, 'f', 8, 64)
scoreString := strconv.FormatFloat(prob, 'f', 8, 64)
//fmt.Printf("Result: %v\n", []string{time, valueString, scoreString})
writer.Write([]string{time, valueString, scoreString})
}
writer.Flush()
}
इस कोड में मुख्य सुधार सीएसवी पंक्तियों को एक-एक करके संसाधित करने के लिए समवर्ती का उपयोग है। एक चैनल का उपयोग करके, हम गोरोइन में इनपुट सीएसवी फ़ाइल से पंक्तियों को पढ़ सकते हैं और परिणामों को मुख्य रूटीन में आउटपुट सीएसवी फ़ाइल में समवर्ती रूप से लिख सकते हैं। यह दृष्टिकोण संपूर्ण फ़ाइल को मेमोरी में लोड करने से बचाता है, जो मेमोरी की खपत को काफी कम कर सकता है और प्रदर्शन में सुधार कर सकता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3