php - 用 PHP 解析大型 xls 文件的最快方法
问题描述
所以基本上我试图在 PHP (Laravel) 中解析大型 xls/xlsx 文件。流程与平时略有不同:
我需要从特定行(由用户提供)中获取列标题并作为数组返回
然后我需要将 xls 文件解析为数组
我需要遍历数组,将每个值的键映射到列名(因为输入是可变的,而 mysql 列不是),所以我将例如 [someKey => value] 更改为 [item => value]每次
然后我使用 Laravel 的 :insert() 将数组批量插入数据库
这基本上是一个 api,因此它需要在例如 15k 行 xls 文件上相当快。到目前为止,我尝试了两件事,都有自己的问题:
Laravel Excel没有办法只抓取一行,它解析整个文件两次,一次返回标题,一次映射值键
我从 Laravel 控制器调用的Python openpyxl
exec()
虽然速度更快,但似乎更难控制,因为到特定键的数组映射变得更加复杂。
有没有更好/更快的方法来做这样的事情?Laravel 无法更改,但其他一切都是公平的游戏。我对输入文件的控制也为零,但用户必须定义包含标题的行。
这是在 Digital Ocean 液滴、LAMP 堆栈、CPU 优化液滴、4 GB / 2 vCPU 上运行的。它在同一台机器上同时运行前端(React)和后端(Laravel)。发生的情况是,当我运行解析时,CPU 立即上升到 100%,这不是一个大问题,因为它相当稳定,但我只是在寻找一种可能的更好/更快的方法,特别是一种方法只拉出一行,这样我就可以更快地返回标题,然后也许是一种更好的方法来映射数组中的列名。
解决方案
推荐阅读
- debugging - 如何正确处理 Google App Script 中的 Google SDK 错误
- python - 将图像数据集保存为 CSV
- javascript - 停止星星重叠javascript
- typescript - 材质 ui 链接 onClick 事件类型
- opencv - 戴口罩的人脸检测
- python - 熊猫数据框和多行值打印为字符串?
- r - 对于重复输入,group + nest + mutate + unnest 比 group+mutate 工作得更快吗?
- c - 将 ASCII 字符转换为字母索引是什么意思,我该怎么做?
- django - Django:如何删除子行并从外键中删除关系
- python - Python正则表达式希腊字符