Go往来交往并两个csv的完成示例

布景

但凡我们措置文件都是往交往并完成用python+pandas ,切实其实很喷喷喷喷喷鼻 。示例可是往交往并完成往日俄然有人找我用go写一个回并两个csv文件的 ,需求将两个csv按id举办回并 ,示例除夜致以下图

思路很复杂 ,往交往并完成先读进两个csv文件,示例然后遍历斗劲id ,往交往并完成假定不异就把此外一个文件的示例内容加到第一个中 。然后成立merge.csv,往交往并完成将上一步掉落踪掉落踪的示例数据写进csv便可。

代码部分

package mainimport ( "encoding/csv" "log" "os" "fmt")func join(fileName1 string,往交往并完成 fileName2 string) (row [][]string) {  fs1, _ := os.Open(fileName1) r1 := csv.NewReader(fs1) content1, err := r1.ReadAll() if err != nil {   log.Fatalf("can not readall, err is %+v", err) } fs2, _ := os.Open(fileName2) r2 := csv.NewReader(fs2) content2, err := r2.ReadAll() if err != nil {   log.Fatalf("can not readall, err is %+v", err) } row = make([][]string, len(content1[1:])) for i, row1 := range content1[1:] {   for _, row2 := range content2[1:] {    if row1[0] == row2[0] {     row[i] = append(row[i], row1[0], row1[1], row1[2], row2[1], row2[2])   }  } } return}func edit(filename string, row [][]string) {  f, err := os.Create(filename) if err != nil {   panic(err) } defer f.Close() //阻拦乱码 f.WriteString("\xEF\xBB\xBF") w := csv.NewWriter(f) w.Write([]string{ "ID", "name", "gender", "course", "score"}) w.WriteAll(row) w.Flush()}func main() {  row := join("1.csv", "2.csv") fmt.Println(row) edit("join.csv", row) fmt.Println("回并已完成
!")}

优化

对小数据量多么是示例没有问题 ,可是往交往并完成一旦数据量增除夜 ,不单读取的示例内存占用添加 ,并且遍历斗劲会很破钞时分 。往交往并完成所以优化的话我们可以以行读取 ,并且设编制独霸go的goroutine来添加快度 。唉,太久没若何写go了,一最早切片都有点忘了  。

到此这篇关于Go往来交往并两个csv的完成示例的文章就引见到这了,更多相干Go言语回并csv内容请搜刮完竣下载之前的文章或延续不雅不雅不雅不雅鉴赏上面的相干文章希看大年夜师往后多多支撑完竣下载 !

上一篇:农文旅深度迟滞融合助力合营敷裕(高质量展开调研行)
下一篇:菜鸟裹裹若何看别人给我买的快递

欢迎扫描关注我们的微信公众平台!

欢迎扫描关注我们的微信公众平台!