从Go中的csv文件读取仅打印最后一行

时间:2017-05-11 08:36:48

标签: csv go

我正在尝试从csv文件中读取内容。我有以下,但当我运行代码时,它只打印csv文件的最后一行。

func main() {
    f, err := os.Open("data.csv")

    if err != nil {
        log.Fatal(err)
    }

    defer f.Close()

    r := csv.NewReader(f)

    for {
        record, err := r.Read()

        if err == io.EOF {
            break
        }

        if err != nil {
            log.Fatal(err)
        }

        fmt.Println(record)
    }
}

// Returns
10 3311 74209 OM209] site

我做错了什么?

data.csv

Item,clientid,ident,site
1,2493,83982,OM221
2,2509,85764,OM201
3,2535,70264,OM205
4,2608,70648,OM205
5,2766,83647,OM304
6,2871,69400,OM201
7,2933,80024,OM201
8,2994,77827,OM301
9,3206,73315,OM201
10,3311,74209,OM209

1 个答案:

答案 0 :(得分:0)

感谢@Volker提及正确的行结尾。

我的csv文件是使用旧版Excel for Mac创建的,显然存在创建正确行结尾的问题。

  

在Mac上,Excel生成带有错误行结尾的csv文件,这会导致git(以及其他内容)出现问题。这个问题至少困扰着Excel 2008和2011,可能还有其他版本。基本上,将文件另存为逗号分隔值(csv)使用回车符\ r而不是换行符\ n作为换行符。回到OS X之前,这实际上是正确的Mac文件结束,但是在移动到更多unix-y之后,正确的行结尾应该是\ n。鉴于没有任何东西使用它作为十多年的正确行结束,这是一个错误。

https://nicercode.github.io/blog/2013-04-30-excel-and-line-endings/

创建一个新的文件空白文件并粘贴内容修复它。