为了账号安全,请及时绑定邮箱和手机立即绑定

比较 CSV 和差异的结论

比较 CSV 和差异的结论

Go
侃侃尔雅 2022-09-19 21:18:47
我开始编写一个程序来比较两个CSV文件。阅读文档后,我找到了一个解决方案,我无法弄清楚如何打印与第二个文件的差异,因为函数返回true/falsepackage mainimport (    "encoding/csv"    "fmt"    "os"    "reflect")func main() {    file, err := os.Open("sms_in_max.csv")    if err != nil {        fmt.Println(err)    }    reader := csv.NewReader(file)    records, _ := reader.ReadAll()    fmt.Println(records)    file2, err := os.Open("sms_out.csv")    if err != nil {        fmt.Println(err)    }    reader2 := csv.NewReader(file2)    records2, _ := reader2.ReadAll()    fmt.Println(records2)    allrs :=reflect.DeepEqual(records, records2)    fmt.Println(allrs)}
查看完整描述

1 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

csv 读入() 函数返回行的切片,其中行是列的切片。

我们可以遍历行,并在一行中再次循环遍历列并比较每个列值。


下面是打印所有行及其行号上存在差异的代码。


package main


import (

    "encoding/csv"

    "fmt"

    "os"

)


func main() {

    file, err := os.Open("sms_in_max.csv")

    if err != nil {

        fmt.Println(err)

    }

    reader := csv.NewReader(file)

    records, _ := reader.ReadAll()

    fmt.Println(records)

    file2, err := os.Open("sms_out.csv")

    if err != nil {

        fmt.Println(err)

    }

    reader2 := csv.NewReader(file2)

    records2, _ := reader2.ReadAll()

    fmt.Println(records2)

    // allrs := reflect.DeepEqual(records, records2)

    // fmt.Println(allrs)


    // Prints lines at which there is difference

    for i := range records {

        diff := false

        for j := range records[i] {

            if records[i][j] != records2[i][j] {

                diff = true

                break

            }

        }

        if diff {

            fmt.Printf("Line %d: %v, %v\n", i+1, records[i], records2[i])

        }

    }

}


查看完整回答
反对 回复 2022-09-19
  • 1 回答
  • 0 关注
  • 73 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信