csv库读取,双引号导致结果异常

1193430916 · 2022-03-31 15:08:06 · 2299 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2022-03-31 15:08:06 的主题,其中的信息可能已经有所发展或是发生改变。

问题: 读取csv文件时,首字符双引号,导致结果异常,这里该如何避免?

tmp.csv文件如下:

11,as"hello"-s,123,ppsid
11,"hello"-s,123,ppsid

主代码:

func Test01() {
    opencast, err := os.Open("./uploads/tmp.csv")
    if err != nil {
        log.Println("csv文件打开失败!")
    }
    defer opencast.Close()

    ReadCsv := csv.NewReader(opencast)

    ReadCsv.LazyQuotes = true
    ReadCsv.FieldsPerRecord = -1

    for {
        read, err := ReadCsv.Read()
        if err != nil && err != io.EOF {
            log.Fatalf("can not read, err is %+v", err)
        }
        if err == io.EOF {
            break
        }

        fmt.Println(read[1])
    }
}

结果:

as"hello"-s
hello"-s,123,ppsid

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2299 次点击  
加入收藏 微博
3 回复  |  直到 2022-04-01 11:25:01
1193430916
1193430916 · #1 · 3年之前

查询资料,说是如果单元格内出现双引号(如下),需要在外部再套一层双引号,但是由于文件的csv文件的写出我这边不可控,还是无法解决:fearful:

csv文件:

11,"as"hello"-s",123,ppsid
11,""hello"-s",123,ppsid
输出:
as"hello"-s
"hello"-s
zzustu
zzustu · #2 · 3年之前
  1. 向提供方反馈,因为提供的csv格式是错误的,应当更正
  2. 自行处理修复,例如:自己写一个csv处理库,对上面的情况容错

有可能提供方是直接插入,分割生成的csv,如果真是是这种情况,

那么数据中本身包含分割符,就难顶了,例如下面的 hello,world

11,hello,world,123,ppsid
1193430916
1193430916 · #3 · 3年之前

以自行解决: 不用csv格式文件了,导出以制表符分割的文件,我这边按制表符分割,用结构体数组读取和存储

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传