解决record on line 2: wrong number of fields

news2024/11/29 4:48:47


背景

 

基于"encoding/csv"库解析。

共解析多个文档,只有这一个解析有问题,所用代码一致,进行比较后
发现该文档和其它文档不同,其它文档是第一行就是列名,下面都是数据;
而这个文档前两行有数据且分别仅占用了1列、2列,接下来几行为空,到第6
行才是每一列数据的列名,第7行为空,第8行开始往后才是真正数据。

文档看起来有点“特殊”。

解析代码

    bs, err := ioutil.ReadFile("路径")
    if err != nil {
        return nil, err
    }

    r := csv.NewReader(strings.NewReader(string(bs)))

    var records [][]string
    records, err = r.ReadAll()
    if err != nil {    // record on line 2: wrong number of fields
        return nil, err
    }

其实代码并无什么问题,但正是由于records, err = r.ReadAll()这一行解析这个“特殊”的文档时报错了。

难道对于这种不规则的文档、这个库就解析不了了吗?有的童鞋已经开始选别的库了,先别急,我们分析一下。

分析

第一,从报错入手。

看看文档中第二行是不是有错误的数据内容?第二行第一列是汉字,第二行第2列是日期,看起来是一堆的#号。

有什么问题吗? 当然没有,每个单元格的内容理论上你想写什么都可以的。

第二,那我们看看代码。

上面是通过ReadAll一次性拿到内容的,平时读取文件不也可以按行吗,又不是必须一次拿到,那就按行试试。  

 bs, err := ioutil.ReadFile("路径")  // 这一步正常,暂不理
    if err != nil {
        return nil, err
    }

    r := csv.NewReader(strings.NewReader(string(bs)))
    
    for line := 1; ; line++ {
        var record []string
        record, err = r.Read() // 验证发现空行会自动跳过
        if err == io.EOF {  // 到结尾就结束
            break
        }

        // 到这里先不要判断err是不是有错,先打印本行数据看看是不是和文档内容一致
        fmt.Println("line ", line, " record:", record) 
        // 由于第6行才到列名,前面5行内容我们不需要,可以专门控制
        if line < 5 {
            if err != nil {   // 看看前面五行是什么妖魔鬼怪
                fmt.Println("前5行出现报错:", err)
                err = nil
            }

            continue  
        }

// 是正常数据,就放到records中
        if len(record) > 0 {
            records = append(records, record)
            continue
        }

// 最后再看是不是出错了,有问题这行就先不管
// 让continue继续看后面的数据有无类似问题,如果没有那就是本行的问题
        if err != nil {
            fmt.Println("line ", line, " 报错:", err)
            continue
        }
    }

这样得到的结果完美,其中的报错并对正常结果无影响。而如果把最后一个if err != nil
放在if line < 5的前面,你就会发现不停的在报错:

record on line 2: wrong number of fields
record on line 4: wrong number of fields
record on line 6: wrong number of fields
record on line 8: wrong number of fields
record on line 9: wrong number of fields
record on line 10: wrong number of fields
record on line 11: wrong number of fields
...

无穷匮也。如图:

同时record那行打印也一直在打印正常数据。

每行都错,错在谁?

第8行开始是正常数据,而从第8行开始每行都有这个报错,难道是文档问题吗,肯定不是了。

所以综合来看,按如上处理即可达到正常效果,有些错误你看看就行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/607144.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

k8s部署Elasticsearch集群+Kibana方案--开启X-Pack 安全认证

前言 本文中使用StatefulSet 方式部署 Elasticsearch 集群&#xff0c;并且开启X-Pack 安全认证&#xff0c;存储使用的是NFS&#xff0c;属于一个初学者自己探索的方案&#xff0c;如果有比较好的方案&#xff0c;还请不吝评论赐教。 版本说明&#xff1a; Kubernetes v1.25…

微信小程序uniapp医患管理系统预约挂号就诊处方满意评价系统

从系统开发环境、系统目标、设计流程、功能设计等几个方面对系统进行了系统设计。开发出本医患关系管理系统&#xff0c;主要实现了管理员后端&#xff1b;首页、个人中心、用户管理、医生管理、医生信息管理、患者信息管理、预约就诊管理、就诊信息管理、投诉管理、投诉反馈管…

【走进Linux的世界】Linux---基本指令(2)

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【Linux专栏】&#x1f388; 本专栏旨在分享学习Linux的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 目录 ls *man指令小…

redis缓存穿透、缓存雪崩 、缓存击穿

一、缓存穿透、缓存雪崩 、缓存击穿 摘自尚硅谷文档 1、缓存穿透 缓存穿透是指查询一个一定不存在的数据&#xff0c;由于缓存是不命中&#xff0c;将去查询数据库&#xff0c;但是数 据库也无此记录&#xff0c;我们没有将这次查询的 null 写入缓存&#xff0c;这将导致这个…

Spin加载中(antd-design组件库)loading效果简单使用

1.Spin加载中 用于页面和区块的加载中状态。 2.何时使用 页面局部处于等待异步数据或正在渲染过程时&#xff0c;合适的加载动效会有效缓解用户的焦虑。 组件代码来自&#xff1a; 加载中 Spin - Ant Design 3.本地验证前的准备 参考文章【react项目antd组件-demo:hello-world_…

PyTorch深度学习实战(2)——PyTorch基础

PyTorch深度学习实战&#xff08;2&#xff09;——PyTorch基础 0. 前言1. 搭建 PyTorch 环境2. PyTorch 张量2.1 张量初始化2.2 张量运算2.3 张量对象的自动梯度计算 3. PyTorch 张量相对于 NumPy 数组的优势小结系列链接 0. 前言 PyTorch 是广泛应用于机器学习领域中的强大开…

AutoHotKey脚本初步:判断和选择

文章目录 脚本基础连击识别setTimer判断和选择 脚本基础 尽管通过窗口识别与按键映射&#xff0c;就可以胜任很多工作了&#xff0c;但AutoHotKey仍提供了一些简单的编程功能&#xff0c;对一些稍微复杂的任务&#xff0c;也可以做到得心应手。但要注意一点&#xff0c;AHK的V…

【操作系统】Linux 中的 Page Cache

【操作系统】Linux 中的 Page Cache 参考资料&#xff1a; 文件 I/O 简明概述 - page cache 进程写文件时&#xff0c;进程发生了崩溃&#xff0c;已写入的数据会丢失吗&#xff1f; Linux Page Cache 调优在 Kafka 中的应用 【操作系统】一文带你深入浅出零拷贝技术 【操作系…

大数据Doris(三十四):Doris配置Spark与Yarn

文章目录 Doris配置Spark与Yarn 一、Doris配置Spark 1、配置 SPARK_HOME 环境变量 2、配置SPARK 依赖包

JavaScript之BOM(八)

JavaScript之BOM 1、BOM中的对象2、window对象2.1、简介2.2、常用的属性与方法2.3、常用的事件2.4、定时器和延时器 3、navigator 常用属性与方法4、history 常用属性与方法5、location 常用属性与方法 BOM&#xff1a;浏览器对象模型&#xff08;Browser Object Model&#xf…

交直流系统潮流计算及相互关联特性分析(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

chatgpt赋能python:Python取消合并单元格

Python取消合并单元格 在Excel中&#xff0c;合并单元格是一个非常常见的操作&#xff0c;它可以将多个单元格合并成一个单元格。这样可视化效果会更好&#xff0c;但是实际上会影响数据的计算和操作。如果你想取消这个操作&#xff0c;手工操作可能会非常费时间。不过&#x…

chatgpt赋能python:Python变量赋值

Python 变量赋值 在 Python 中&#xff0c;我们可以使用多种符号来给变量赋值。本文将介绍这些符号以及它们在编程中的应用。 等号&#xff08;&#xff09; 在 Python 中&#xff0c;我们最常用的符号是等号&#xff08;&#xff09;&#xff0c;它可以将一个值赋给一个变量…

Image fusion based on generative adversarial network consistent with perception

1.摘要 深度学习是红外和可见光图像融合领域中快速发展的方法。在这个背景下&#xff0c;密集块在深层网络中的使用显著提高了浅层信息的利用率&#xff0c;并且生成对抗网络&#xff08;GAN&#xff09;的组合也提高了两个源图像的融合性能。我们提出了一种基于密集块和GAN的…

“吴军讲ChatGPT“课程的个人总结

人工智能时代, ChatGPT如此火热, 大家恐慌, 焦虑, 大家最关注的是两个问题 我会不会被取代?我有没有机会? 吴军老师(浪潮之巅, 数学之美等), 有门课程, <吴军讲ChatGPT>, 用通俗易懂的语言, 讲解了人工智能的技术原理前世今生,以及当下火热的ChatGPT的可以做什么, 那…

关于windows驱动中断的几个小问题

1. intel 8259芯片中的IRQ2和int2的区别是什么&#xff1f; 答曰&#xff1a;IRQ2是芯片上的引脚&#xff0c;而int2是中断向量表的第2项&#xff0c;两者有很大区别。 Intel8259A芯片的中断引脚分别为&#xff1a; 主片&#xff1a; 0&#xff1a;8254时钟 1&#xff1a;键盘 …

chatgpt赋能python:**Python取余符号:了解%运算符的作用和用法**

Python取余符号&#xff1a;了解%运算符的作用和用法 作为一名有着10年编程经验的工程师&#xff0c;我对Python这门编程语言深有了解。在本文中&#xff0c;我将详细介绍Python的取余符号&#xff0c;即%运算符&#xff0c;其作用和用法。 什么是Python取余符号&#xff1f;…

AIGC技术研究与应用 ---- 下一代人工智能:新范式!新生产力!(2.3-大模型发展历程 之 多模态)

文章大纲 什么是多模态stable diffusion“ CLIP 其他模型”成为通用的做法多模态模态生成&#xff1a;文字生成图像取得突破&#xff0c;其他领域仍有待提升参考文献与学习路径GPT 系列模型解析前序文章模型进化券商研报陆奇演讲多模态 什么是多模态 多模态生成&#xff0c; …

PAT A1164 Good in C

1164 Good in C 分数 20 作者 陈越 单位 浙江大学 When your interviewer asks you to write "Hello World" using C, can you do as the following figure shows? Input Specification: Each input file contains one test case. For each case, the first pa…

信息论与编码 SCUEC DDDD 期末复习

1.证明熵的可加性 2.假设一帧视频图像可以认为是由3*10的五次方个像素组成&#xff08;每像素均独立变化&#xff09;&#xff0c;如果每个像素可取128个不同的等概率亮度表示。请计算出每帧图像含多少信息量&#xff1f;若有一口述者在约12000个汉字的字汇中选400个字来口述此…