本文会分为如下几个部分来展开:CSV和EXCEL文件的定义,两种文件格式的区别,数据量大的场景,两种文件格式的转换。
CSV,全称是Comma-SeparatedValues,直接翻译就是用逗号分隔开值;那么CSV文件,直译就是用逗号分隔开值的文件,里面每一行都是一条数据记录,每条记录由一个或多个字段组成,字段间用逗号分隔。它是一种只能存储数据(但不能包含格式,公式,宏等)的纯文本文件格式,支持用任何文本编辑器打开和编辑;如果我们用excel打开,逗号会自动分隔到不同的单元格中。
EXCEL,全称是MicrosoftExcel,是由微软公司提供的一款电子表格软件。而EXCEL文件是一种二进制文件格式,它用二进制编码来存储数据。不同于CSV文件,EXCEL文件不仅可以存储数据,还可以对数据进行操作,分析,可视化等操作。p.s.细心的小伙伴会发现,EXCEL文件的后缀一般是XLS,有些也是XLSX。这是因为EXCEL版本的缘故,前者XLS(Excelspreadsheet)是EXCEL97—2003文档格式,而后者则是更新的EXCEL2007/2010及以上版本的专有文档格式。
本小节会分为如下4个部分进行对比:文件格式与内容、数据操作与功能、内存消耗、存储模式。
就像定义小节里介绍的一样,CSV格式是一种纯文本格式,它用逗号分隔开值,每一行代表一条记录,每一列代表着一个字段。因此,CSV文件也被称为平面文件,它只能存储数据,但不包含格式,公式,宏等。它的优点就是简单通用,占用空间小,支持任何文本编辑器打开或编辑。
而EXCEL格式作为一种二进制格式,每个工作表可以包含多个单元格,每个单元格则可以存储数据、格式、公式、宏等信息。EXCEL文件的优点就是功能强大,易于使用,支持对数据进行分析、可视化、链接外部数据源等操作。
CSV文件和EXCEL文件在数据操作和功能方面,因为格式不同(纯文本和二进制),天然就有着很大的差异。
CSV文件仅支持对数据进行基本的读写、排序、筛选等操作,可以被被任何编程语言轻松地解析和生成,例如Python,Java,C#等;但不支持对数据进行合并、拆分、置换或查找替换,也不提供对数据进行加密保护、共享或审计等功能。而excel文件则可以对数据进行复杂的计算、统计、可视化、条件格式等操作,支持对数据进行合并、拆分、置换或查找替换,且提供对数据进行加密保护、共享或审计等功能;但因为是一种复杂的二进制文件,它就需要专门的编程语言库来操纵,例如xlrd,xlwt,openpyxl等。
CSV文件是流式生成的,它不需要一次性加载所有的数据到内存中,因此对内存的消耗比较小,导入导出的速度相对就会比较快。EXCEL文件则不是,它需要一次性将所有的数据加载到内存中,因此对内存的消耗较大,导入导出的速度就会比较慢;特别是Excel文件在数据量过大或格式过多的的时候,很容易出现内存溢出(OOM)的问题。
p.s.想要一定程度上的避免/解决这个问题,可以:1、使用64位版本的Excel,它可以使用更多的内存;2、清理Excel文件,删除不必要的格式等信息;3、优化Excel文件中的公式,避免引用整列或整行,避免使用跨工作簿或可变的函数;4、使用Poi中的SXSSFWorkbook类来导出超大Excel文件,它可以将数据写入临时文件,不占用内存。
CSV文件被称为平面文件,它只能存储数据,但不包含格式,公式,宏等信息,因此CSV文件仅支持存储一张表的数据,不支持关系型数据库的概念,如主键,外键,索引等。
EXCEL文件则不仅可以存储数据,还支持对数据进行操作,分析,可视化等操作,它支持存多张表的数据,支持关系型数据库的概念,如主键,外键,索引等。
结合以上对比项来看,我们可以得出个初步结论:CSV文件侧重于存储简单、结构化、规范化的数据(比如日志,配置信息等),适合用于数据传输、备份、输入输出、编程等场景。而Excel文件则侧重于存储复杂,非结构化,非规范化的数据(比如用户输入信息、调查问卷信息等),适合用于数据管理、数据操作、分析、计算、操作等场景。当然,在实际的数据应用中,我们还是需要根据数据的特点和用户需求来决定到底选用哪种格式。
结合前面的小节小结,我们可以说当数据量非常大的时候,一般推荐用csv格式来存储数据,因为CSV格式有如下优势:
当然,如果用户诉求就是希望直接对数据进行分析、校验、可视化等操作,就考虑可以使用EXCEL文件。
csv和excel格式文件是可以互相转换的,可以使用以下方法来进行转换:
注意,csv文件和excel文件的数据格式和功能有一些差异,转换的过程中可能会丢失一些信息,例如格式、宏等。因此,最好在初期导出数据的时候,就根据数据特点和用户需求,选择合适的文件格式,保证数据的完整性和准确性。
华为开发者空间发布
让每位开发者拥有一台云主机
在此一键设置昵称,即可参与社区互动!
*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。