如果csv文件超过104万行Excel、wps打不开,使用什么软件对对超大CSV文件进行编辑呢?Snapde,它是最好用的CSV大文件编辑电子表格软件之一,内核全部用c语言编写,对于数据编辑和运算非常轻巧强大;能轻松打开2G大小一两千万行的CSV大文件,除了常用电子表格编辑功能,还具有:文件分割、合并、过滤、排序、删除重复等基本功能;并且集合了Exprtk、C语言、Python等脚本执行器,能在表格中写这三种脚本对数据进行运算处理,运行速度可以比java、C#都快。
1、运行速度:打开CSV文件速度比Excel、WPS快四倍,上百兆的CSV文件打开只需十几秒,上千万行的排序都可以几秒内完成
2、内存占用:文件内容全部放在内存中,纯粹的C语言指针将内存使用优化到极致,大部分情况内存也就比CSV文件大2-3倍,有些情况内存甚至比CSV文件还小
3、CSV大小:看机器内存,一般8G内存机器可以一次编辑2G的CSV文件
4、最大行数:Excel2007以上版本最多为1048576行,Snapde可以编辑的行数是Excel十几二十倍以上,一般8G内存机器都可以打开1000万到2000万行CSV进行编辑
5、分页编辑:对于大于2G的CSV大数据,还可以进行分页编辑一次打开1000万行编辑保存,然后打开下1000万行进行编辑保存。。。
6、数据运算:软件集合了Exprtk、C、python语言执行器;经测试Exprtk执行效率比C#、java慢一点(20%),C语言比C#、java快很多,python比Exprtk、C慢10倍左右但可用资源多;不用说Excel的VBA,这三种语言都可以直接虐杀它
7、运行环境:windows
一、文件功能
1、新建电子表格,默认是299行、25列,如果想要增加行数可以在底下空白处双击鼠标左键一次添加300行,想要增加列数可以在右边空白处双击鼠标左键一次添加26列;如果想要精确控制行列数可以在编辑下的编辑行列数菜单设置具体行列数
2、打开CSV、TXT、smd文件,CSV是逗号分隔的文本文件,TXT是tab键分割的文本文件,smd是Snapde自身定义的文件格式(打开保存速度比CSV、TXT快两倍),软件可以自动识别GBK、UTF8、UNICODE编码,保存只能保存成GBK编码
3、分页打开,如果CSV文件太大可以进行非凡也打开,指定是否保留第一行标题、开始行号、一次打开的行数
4、文件保存,新建、打开、分页打开的文件进行保存
5、另存,当前文件可以另存为新文件或者新格式文件
6、追加,将很多子文件追加打开到本文件中,如果第一行标题相同会自动过滤掉新文件标题行
7、分割,将本文件分割保存成多个子文件,包括:是否保留第一行标题,按行数分割或者按文件数分割
二、编辑功能
1、灵活的选择集:全选、行选、列选、框选
2、单元格非常优秀的多行编辑功能,单元格支持编辑几兆到几十兆的多行文本
3、编辑支持包含数字的序列变化:框选需要变化的单元格进行编辑,按住ctrl键然后完成编辑,如果编辑内容中存在数字这些单元格会得到序列变化内容,否则内容相同
4、强大的撤销、重做功能
5、支持对选择集的剪切、复制、粘贴
6、清除内容
7、删除:删除选定行、列
8、全选
9、插入行/列:在选定行或列前面可以插入一行或一列
10、恢复宽高:将选定的行或列恢复成默认的宽高
11、隐藏:将选定的行或列进行隐藏
12、取消隐藏:将选定行或列中间的隐藏行列进行显示
13、放大、缩小:对电子表格进行放大或缩小
14、转跳:转跳到指定的行列
15、设置过滤:对选择集设置过滤(如果只选择了一个单元格那就是对全部进行过滤),只显示过滤条件内的数据
16、删除重复:对选择集中的重复数据进行删除(包括扩选整行删除)
17、升序排序:对选择集进行升序排序(包括扩选整行排序)
18、降序排序:对选择集进行降序排序(包括扩选整行排序)
19、隔行颜色:设置单双行背景显示不同颜色
20、添加300行:往后面添加300行
21、添加26列:往后面添加26列
22、设置行列数:精确设置电子表格的行列数
三、搜索
1、查找:往前、往后查找、计数
2、替换:替换下一个、全部替换
四、脚本
1、设置Exprtk脚本:将单元格设置为Exprtk脚本,可以在单元格进行脚本编辑和运行
2、设置TCC脚本:将单元格设置为C语言脚本,可以在单元格进行脚本编辑和运行
3、设置Python脚本:将单元格设置为Python脚本,可以在单元格进行脚本编辑和运行
4、设置普通文本
5、运行选择脚本:将选择集中脚本单元格按从左到右、从上往下运行
6、运行全部脚本:将电子表格中所欲脚本单元格按从左到右、从上往下运行
五、脚本接口
1、Exprtk脚本接口
A、Exprtk语法:https://github.com/ArashPartow/exprtk
B、Snapde封装的Expr接口:
单元格的数字变量,如:A1,代表第一行第一列的单元格数字变量,可以用它获取此单元格的值,也可以直接赋值数字
单元格的字符串变量,如:A1_,代表第一行第一列的单元格字符串变量,可以用它获取此单元格的字符串,也可以直接赋值字符串
a、to_lower(str),将字符串转化成小写
b、to_upper(str),将字符串转化成大写
c、to_string(num),将数字转化成字符串
d、to_number(str),将字符串转化成数字
e、get(row,col),获取row、col指定单元格的数字,如果是非数字字符串则返回0
f、set(row,col,num),将row、col、指定单元格设置为数字num
g、get_(row,col),获取row、col指定单元格的字符串,如果是是数字则将数字转化成字符串
h、set_(row,col,str),将row、col、指定单元格设置为字符串str
i、set_progress(n),设置进度条进度n,n的范围从0到100
j、sleep(n),挂起一段时间n毫秒,n为整数
k、get_tick_count(),获取从操作系统启动到现在所经过的毫秒数
l、save(),保存当前文件,成功返回1,失败返回0
m、save_as(file),将当前电子表格另存为file指定的文件(file必须是带名称的全路径),成功返回1,失败返回0
n、get_row_count(),获取当前电子表格的行数
o、get_col_count(),获取当前电子表格的列数
p、resize(nRow,nCol),重新设置当前电子表格的行列数,nRow、nCol都需要大于1
2、C语言脚本
a、get(int row, int col, double *num),获取row、col指定单元格的数字,将结果放在num里,如果是非数字字符串则返回0
b、set(int row, int col, double num),将row、col、指定单元格设置为数字num
c、get_(int row,int col, char **data),获取row、col指定单元格的字符串,将结果放到data里,如果是是数字则将数字转化成字符串,注意:*data指针不需要手动释放,会在下次调用此函数或本脚本运行完自动释放
d、set_(int row, int col, char *str),将row、col、指定单元格设置为字符串str
e、set_progress(int n),设置进度条进度n,n的范围从0到100
f、get_tick_count(),获取从操作系统启动到现在所经过的毫秒数
g、save(),保存当前文件,成功返回1,失败返回0
h、save_as(char *file),将当前电子表格另存为file指定的文件(file必须是带名称的全路径),成功返回1,失败返回0
i、get_row_count(),获取当前电子表格的行数
j、get_col_count(),获取当前电子表格的列数
k、resize(int nRow, int nCol),重新设置当前电子表格的行列数,nRow、nCol都需要大于1
3、Python脚本
在使用Snapde功能前需要引入Snapde模块:import Snapde
a、Snapde.get(int row, int col),获取row、col指定单元格的数字,如果是非数字字符串则返回0
b、Snapde.set(int row, int col, double num),将row、col、指定单元格设置为数字num
c、Snapde.get_(int row,int col),获取row、col指定单元格的字符串,如果是是数字则将数字转化成字符串
d、Snapde.set_(int row, int col, char *str),将row、col、指定单元格设置为字符串str
e、Snapde.set_progress(int n),设置进度条进度n,n的范围从0到100
f、Snapde.get_tick_count(),获取从操作系统启动到现在所经过的毫秒数
g、Snapde.save(),保存当前文件,成功返回1,失败返回0
h、Snapde.save_as(char *file),将当前电子表格另存为file指定的文件(file必须是带名称的全路径),成功返回1,失败返回0
i、Snapde.get_row_count(),获取当前电子表格的行数
j、Snapde.get_col_count(),获取当前电子表格的列数
k、Snapde.resize(int nRow, int nCol),重新设置当前电子表格的行列数,nRow、nCol都需要大于1
六、脚本性能
打开一个910M的CSV文件:london_crime_by_lsoa.csv,总共有13490605行、7列,单元格:94434235个,使用三种脚本进行简单求和运算:
1、Exprtk脚本花费:4.343秒
2、C语言花费:1.203秒
3、Python语言花费:52.468秒
140.5M / 09-05
76.4M / 03-25
55M / 06-05
237.9M / 04-13
900.9M / 03-02
96.2M / 07-06
311.2M / 07-06
335M / 07-06
200M / 07-06
413.8M / 07-06
484.7M / 09-27
165.4M / 09-05
353.9M / 06-05
131.8M / 04-13
195.6M / 03-03
45.6M / 09-08
665.2M / 07-06
2.84G / 07-06
93M / 07-06
338.3M / 07-06
1.38G / 07-26
488.3M / 07-16
109.8M / 06-03
142M / 01-08
1.2M / 11-23
548.8M / 04-13
1.6M / 04-13
1.48G / 03-18
646.6M / 03-03
133.7M / 03-03
110.5M / 09-05
33.4M / 09-05
325.8M / 08-12
60M / 04-29
254M / 04-25
659M / 04-23
1M / 12-26
253.4M / 12-08
253M / 12-08
1.19G / 11-16
369M / 09-22
181.5M / 09-22
201.2M / 09-05
488.3M / 07-16
248.9M / 12-08
248.9M / 12-08
100.6M / 03-06
148.9M / 03-06
1.12G / 07-06
1.25G / 07-06
126.7M / 02-04
1.76G / 09-22
1.92G / 04-17
201.5M / 04-13
7.31G / 07-01
94.3M / 07-06
2.48G / 07-06
7.63G / 07-06
1M / 07-06
778.1M / 07-06
561.8M / 07-11
72M / 07-06
548.7M / 07-06
1.00G / 07-06
9.13G / 07-06
126.2M / 07-06
72M / 07-06
105.1M / 07-06
132M / 07-06
132M / 07-06