使用golang通过分块方式读取超大Excel(包含100列100W行)并随机取20W行数据
时间: 2023-02-11 20:25:31 浏览: 269
可以使用第三方库"github.com/360EntSecGroup-Skylar/excelize"来读取Excel文件。可以先通过分块的方式读取数据,再随机从中取出20W行。代码示例如下:
```
package main
import (
"fmt"
"math/rand"
"time"
"github.com/360EntSecGroup-Skylar/excelize"
)
func main() {
f, err := excelize.OpenFile("large.xlsx")
if err != nil {
fmt.Println(err)
return
}
// 获取第一个工作表
rows := f.GetRows("Sheet1")
// 每次读取的行数
blockSize := 10000
// 读取总行数
totalRows := len(rows)
// 随机取出的行数
sampleSize := 20000
// 初始化随机数生成器
rand.Seed(time.Now().UnixNano())
// 分块读取数据
for i := 0; i < totalRows; i += blockSize {
end := i + blockSize
if end > totalRows {
end = totalRows
}
block := rows[i:end]
// 在当前块中随机选取数据
for j := 0; j < sampleSize; j++ {
idx := rand.Intn(len(block))
row := block[idx]
// 打印随机选取的行
fmt.Println(row)
}
}
}
```
注意:这是一个示例,如果文件特别大可能会导致内存不足,需要进行优化