如果csv文件超過104萬行Excel、wps打不開,使用什么軟件對(duì)對(duì)超大CSV文件進(jìn)行編輯呢?Snapde,它是*好用的CSV大文件編輯電子表格軟件之一,內(nèi)核全部用c語言編寫,對(duì)于數(shù)據(jù)編輯和運(yùn)算非常輕巧強(qiáng)大;能輕松打開2G大小一兩千萬行的CSV大文件,除了常用電子表格編輯功能,還具有:文件分割、合并、過濾、排序、刪除重復(fù)等基本功能;并且集合了Exprtk、C語言、Python等腳本執(zhí)行器,能在表格中寫這三種腳本對(duì)數(shù)據(jù)進(jìn)行運(yùn)算處理,運(yùn)行速度可以比java、C#都快。
軟件特色
1、運(yùn)行速度:打開CSV文件速度比Excel、WPS快四倍,上百兆的CSV文件打開只需十幾秒,上千萬行的排序都可以幾秒內(nèi)完成
2、內(nèi)存占用:文件內(nèi)容全部放在內(nèi)存中,純粹的C語言指針將內(nèi)存使用優(yōu)化到*,大部分情況內(nèi)存也就比CSV文件大2-3倍,有些情況內(nèi)存甚至比CSV文件還小
3、CSV大。嚎礄C(jī)器內(nèi)存,一般8G內(nèi)存機(jī)器可以一次編輯2G的CSV文件
4、*大行數(shù):Excel2007以上版本*多為1048576行,Snapde可以編輯的行數(shù)是Excel十幾二十倍以上,一般8G內(nèi)存機(jī)器都可以打開1000萬到2000萬行CSV進(jìn)行編輯
5、分頁編輯:對(duì)于大于2G的CSV大數(shù)據(jù),還可以進(jìn)行分頁編輯一次打開1000萬行編輯保存,然后打開下1000萬行進(jìn)行編輯保存。。。
6、數(shù)據(jù)運(yùn)算:軟件集合了Exprtk、C、python語言執(zhí)行器;經(jīng)測(cè)試Exprtk執(zhí)行效率比C#、java慢一點(diǎn)(20%),C語言比C#、java快很多,python比Exprtk、C慢10倍左右但可用資源多;不用說Excel的VBA,這三種語言都可以直接虐殺它
7、運(yùn)行環(huán)境:windows
功能介紹
一、文件功能
1、新建電子表格,默認(rèn)是299行、25列,如果想要增加行數(shù)可以在底下空白處雙擊鼠標(biāo)左鍵一次添加300行,想要增加列數(shù)可以在右邊空白處雙擊鼠標(biāo)左鍵一次添加26列;如果想要精確控制行列數(shù)可以在編輯下的編輯行列數(shù)菜單設(shè)置具體行列數(shù)
2、打開CSV、TXT、smd文件,CSV是逗號(hào)分隔的文本文件,TXT是tab鍵分割的文本文件,smd是Snapde自身定義的文件格式(打開保存速度比CSV、TXT快兩倍),軟件可以自動(dòng)識(shí)別GBK、UTF8、UNICODE編碼,保存只能保存成GBK編碼
3、分頁打開,如果CSV文件太大可以進(jìn)行非凡也打開,指定是否保留*行標(biāo)題、開始行號(hào)、一次打開的行數(shù)
4、文件保存,新建、打開、分頁打開的文件進(jìn)行保存
5、另存,當(dāng)前文件可以另存為新文件或者新格式文件
6、追加,將很多子文件追加打開到本文件中,如果*行標(biāo)題相同會(huì)自動(dòng)過濾掉新文件標(biāo)題行
7、分割,將本文件分割保存成多個(gè)子文件,包括:是否保留*行標(biāo)題,按行數(shù)分割或者按文件數(shù)分割
二、編輯功能
1、靈活的選擇集:全選、行選、列選、框選
2、單元格非常優(yōu)秀的多行編輯功能,單元格支持編輯幾兆到幾十兆的多行文本
3、編輯支持包含數(shù)字的序列變化:框選需要變化的單元格進(jìn)行編輯,按住ctrl鍵然后完成編輯,如果編輯內(nèi)容中存在數(shù)字這些單元格會(huì)得到序列變化內(nèi)容,否則內(nèi)容相同
4、強(qiáng)大的撤銷、重做功能
5、支持對(duì)選擇集的剪切、復(fù)制、粘貼
6、清除內(nèi)容
7、刪除:刪除選定行、列
8、全選
9、插入行/列:在選定行或列前面可以插入一行或一列
10、恢復(fù)寬高:將選定的行或列恢復(fù)成默認(rèn)的寬高
11、隱藏:將選定的行或列進(jìn)行隱藏
12、取消隱藏:將選定行或列中間的隱藏行列進(jìn)行顯示
13、放大、縮。簩(duì)電子表格進(jìn)行放大或縮小
14、轉(zhuǎn)跳:轉(zhuǎn)跳到指定的行列
15、設(shè)置過濾:對(duì)選擇集設(shè)置過濾(如果只選擇了一個(gè)單元格那就是對(duì)全部進(jìn)行過濾),只顯示過濾條件內(nèi)的數(shù)據(jù)
16、刪除重復(fù):對(duì)選擇集中的重復(fù)數(shù)據(jù)進(jìn)行刪除(包括擴(kuò)選整行刪除)
17、升序排序:對(duì)選擇集進(jìn)行升序排序(包括擴(kuò)選整行排序)
18、降序排序:對(duì)選擇集進(jìn)行降序排序(包括擴(kuò)選整行排序)
19、隔行顏色:設(shè)置單雙行背景顯示不同顏色
20、添加300行:往后面添加300行
21、添加26列:往后面添加26列
22、設(shè)置行列數(shù):精確設(shè)置電子表格的行列數(shù)
三、搜索
1、查找:往前、往后查找、計(jì)數(shù)
2、替換:替換下一個(gè)、全部替換
四、腳本
1、設(shè)置Exprtk腳本:將單元格設(shè)置為Exprtk腳本,可以在單元格進(jìn)行腳本編輯和運(yùn)行
2、設(shè)置TCC腳本:將單元格設(shè)置為C語言腳本,可以在單元格進(jìn)行腳本編輯和運(yùn)行
3、設(shè)置Python腳本:將單元格設(shè)置為Python腳本,可以在單元格進(jìn)行腳本編輯和運(yùn)行
4、設(shè)置普通文本
5、運(yùn)行選擇腳本:將選擇集中腳本單元格按從左到右、從上往下運(yùn)行
6、運(yùn)行全部腳本:將電子表格中所欲腳本單元格按從左到右、從上往下運(yùn)行
五、腳本接口
1、Exprtk腳本接口
A、Exprtk語法:https://github.com/ArashPartow/exprtk
B、Snapde封裝的Expr接口:
單元格的數(shù)字變量,如:A1,代表*行*列的單元格數(shù)字變量,可以用它獲取此單元格的值,也可以直接賦值數(shù)字
單元格的字符串變量,如:A1_,代表*行*列的單元格字符串變量,可以用它獲取此單元格的字符串,也可以直接賦值字符串
a、to_lower(str),將字符串轉(zhuǎn)化成小寫
b、to_upper(str),將字符串轉(zhuǎn)化成大寫
c、to_string(num),將數(shù)字轉(zhuǎn)化成字符串
d、to_number(str),將字符串轉(zhuǎn)化成數(shù)字
e、get(row,col),獲取row、col指定單元格的數(shù)字,如果是非數(shù)字字符串則返回0
f、set(row,col,num),將row、col、指定單元格設(shè)置為數(shù)字num
g、get_(row,col),獲取row、col指定單元格的字符串,如果是是數(shù)字則將數(shù)字轉(zhuǎn)化成字符串
h、set_(row,col,str),將row、col、指定單元格設(shè)置為字符串str
i、set_progress(n),設(shè)置進(jìn)度條進(jìn)度n,n的范圍從0到100
j、sleep(n),掛起一段時(shí)間n毫秒,n為整數(shù)
k、get_tick_count(),獲取從操作系統(tǒng)啟動(dòng)到現(xiàn)在所經(jīng)過的毫秒數(shù)
l、save(),保存當(dāng)前文件,成功返回1,失敗返回0
m、save_as(file),將當(dāng)前電子表格另存為file指定的文件(file必須是帶名稱的全路徑),成功返回1,失敗返回0
n、get_row_count(),獲取當(dāng)前電子表格的行數(shù)
o、get_col_count(),獲取當(dāng)前電子表格的列數(shù)
p、resize(nRow,nCol),重新設(shè)置當(dāng)前電子表格的行列數(shù),nRow、nCol都需要大于1
2、C語言腳本
a、get(int row, int col, double *num),獲取row、col指定單元格的數(shù)字,將結(jié)果放在num里,如果是非數(shù)字字符串則返回0
b、set(int row, int col, double num),將row、col、指定單元格設(shè)置為數(shù)字num
c、get_(int row,int col, char **data),獲取row、col指定單元格的字符串,將結(jié)果放到data里,如果是是數(shù)字則將數(shù)字轉(zhuǎn)化成字符串,注意:*data指針不需要手動(dòng)釋放,會(huì)在下次調(diào)用此函數(shù)或本腳本運(yùn)行完自動(dòng)釋放
d、set_(int row, int col, char *str),將row、col、指定單元格設(shè)置為字符串str
e、set_progress(int n),設(shè)置進(jìn)度條進(jìn)度n,n的范圍從0到100
f、get_tick_count(),獲取從操作系統(tǒng)啟動(dòng)到現(xiàn)在所經(jīng)過的毫秒數(shù)
g、save(),保存當(dāng)前文件,成功返回1,失敗返回0
h、save_as(char *file),將當(dāng)前電子表格另存為file指定的文件(file必須是帶名稱的全路徑),成功返回1,失敗返回0
i、get_row_count(),獲取當(dāng)前電子表格的行數(shù)
j、get_col_count(),獲取當(dāng)前電子表格的列數(shù)
k、resize(int nRow, int nCol),重新設(shè)置當(dāng)前電子表格的行列數(shù),nRow、nCol都需要大于1
3、Python腳本
在使用Snapde功能前需要引入Snapde模塊:import Snapde
a、Snapde.get(int row, int col),獲取row、col指定單元格的數(shù)字,如果是非數(shù)字字符串則返回0
b、Snapde.set(int row, int col, double num),將row、col、指定單元格設(shè)置為數(shù)字num
c、Snapde.get_(int row,int col),獲取row、col指定單元格的字符串,如果是是數(shù)字則將數(shù)字轉(zhuǎn)化成字符串
d、Snapde.set_(int row, int col, char *str),將row、col、指定單元格設(shè)置為字符串str
e、Snapde.set_progress(int n),設(shè)置進(jìn)度條進(jìn)度n,n的范圍從0到100
f、Snapde.get_tick_count(),獲取從操作系統(tǒng)啟動(dòng)到現(xiàn)在所經(jīng)過的毫秒數(shù)
g、Snapde.save(),保存當(dāng)前文件,成功返回1,失敗返回0
h、Snapde.save_as(char *file),將當(dāng)前電子表格另存為file指定的文件(file必須是帶名稱的全路徑),成功返回1,失敗返回0
i、Snapde.get_row_count(),獲取當(dāng)前電子表格的行數(shù)
j、Snapde.get_col_count(),獲取當(dāng)前電子表格的列數(shù)
k、Snapde.resize(int nRow, int nCol),重新設(shè)置當(dāng)前電子表格的行列數(shù),nRow、nCol都需要大于1
六、腳本性能
打開一個(gè)910M的CSV文件:london_crime_by_lsoa.csv,總共有13490605行、7列,單元格:94434235個(gè),使用三種腳本進(jìn)行簡(jiǎn)單求和運(yùn)算:
1、Exprtk腳本花費(fèi):4.343秒
2、C語言花費(fèi):1.203秒
3、Python語言花費(fèi):52.468秒