1 回答

TA貢獻1811條經(jīng)驗 獲得超6個贊
正如評論中所建議的那樣,不要使用 XLS 格式,而是使用自定義的快速數(shù)據(jù)格式來讀取和寫入表格。
在最基本的情況下,只需將列數(shù)和行數(shù)寫入二進制文件,然后一次性寫入所有數(shù)據(jù)。這將非???,我在這里創(chuàng)建了一個小示例,它只將 300.000 x 40 float32 寫入文件并讀回它們。在我的機器上,這大約需要 400 毫秒和 250 毫秒(請注意,文件在寫入后在緩存中很熱,初始讀取可能需要更長的時間)。
package main
import (
"encoding/binary"
"os"
"github.com/gonutz/tic"
)
func main() {
const (
rowCount = 300000
colCount = 40
)
values := make([]float32, rowCount*colCount)
func() {
defer tic.Toc()("write")
f, _ := os.Create("file")
defer f.Close()
binary.Write(f, binary.LittleEndian, int64(rowCount))
binary.Write(f, binary.LittleEndian, int64(colCount))
check(binary.Write(f, binary.LittleEndian, values))
}()
func() {
defer tic.Toc()("read")
f, _ := os.Open("file")
defer f.Close()
var rows, cols int64
binary.Read(f, binary.LittleEndian, &rows)
binary.Read(f, binary.LittleEndian, &cols)
vals := make([]float32, rows*cols)
check(binary.Read(f, binary.LittleEndian, vals))
}()
}
func check(err error) {
if err != nil {
panic(err)
}
}
- 1 回答
- 0 關注
- 121 瀏覽
添加回答
舉報