PHP按行读取、处理较大CSV文件的代码实例


Posted in PHP onApril 09, 2014

对于数百万条数据量的CSV文件,文件大小可能达到数百M,如果简单读取的话很可能出现超时或者卡死的现象。

为了成功将CSV文件里的数据导入数据库,分批处理是非常必要的。

下面这个函数是读取CSV文件中指定的某几行数据:

/**
 * csv_get_lines 读取CSV文件中的某几行数据
 * @param $csvfile csv文件路径
 * @param $lines 读取行数
 * @param $offset 起始行数
 * @return array
 * */
function csv_get_lines($csvfile, $lines, $offset = 0) {
    if(!$fp = fopen($csvfile, 'r')) {
     return false;
    }
    $i = $j = 0;
 while (false !== ($line = fgets($fp))) {
  if($i++ < $offset) {
   continue; 
  }
  break;
 }
 $data = array();
 while(($j++ < $lines) && !feof($fp)) {
  $data[] = fgetcsv($fp);
 }
 fclose($fp);
    return $data;
}

调用方法:
$data = csv_get_lines('path/bigfile.csv', 10, 2000000);
print_r($data);

函数主要采用行定位的思路,通过跳过起始行数来实现文件指针定位。

上述函数对500M以内的文件进行过测试,运行通畅,对于更大的文件未做测试,请斟酌使用或加以改进。

PHP 相关文章推荐
PHP 超链接 抓取实现代码
Jun 29 PHP
PHP 调试工具Debug Tools
Apr 30 PHP
php文件怎么打开 如何执行php文件
Dec 21 PHP
9个实用的PHP代码片段分享
Jan 22 PHP
php打印一个边长为N的实心和空心菱型的方法
Mar 02 PHP
PHP实现的增强性mhash函数
May 27 PHP
php中namespace use用法实例分析
Jan 22 PHP
PHP查看SSL证书信息的方法
Sep 22 PHP
yii框架redis结合php实现秒杀效果(实例代码)
Oct 26 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
Apr 26 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
Oct 14 PHP
Laravel如何实现适合Api的异常处理响应格式
Jun 14 PHP
PHP二维数组排序的3种方法和自定义函数分享
Apr 09 #PHP
php计算几分钟前、几小时前、几天前的几个函数、类分享
Apr 09 #PHP
PHP扩展模块Pecl、Pear以及Perl的区别
Apr 09 #PHP
排序算法之PHP版快速排序、冒泡排序
Apr 09 #PHP
PHP读取大文件的类SplFileObject使用介绍
Apr 09 #PHP
php解决约瑟夫环示例
Apr 09 #PHP
适用于抽奖程序、随机广告的PHP概率算法实例
Apr 09 #PHP
You might like
PHP flush()与ob_flush()的区别详解
2013/06/03 PHP
Thinkphp3.2.3分页使用实例解析
2016/07/28 PHP
php实现socket推送技术的示例
2017/12/20 PHP
JavaScript如何从listbox里同时删除多个项目
2013/10/12 Javascript
一波JavaScript日期判断脚本分享
2016/03/06 Javascript
Bootstrap按钮下拉菜单组件详解
2016/05/10 Javascript
JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】
2016/12/12 Javascript
Vue组件通信实践记录(推荐)
2017/08/15 Javascript
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
js实现ATM机存取款功能
2020/10/27 Javascript
JavaScript Blob对象原理及用法详解
2020/10/14 Javascript
[53:43]VP vs NewBee Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
Python中多线程的创建及基本调用方法
2016/07/08 Python
浅谈python和C语言混编的几种方式(推荐)
2017/09/27 Python
Python简单实现控制电脑的方法
2018/01/22 Python
解决python升级引起的pip执行错误的问题
2018/06/12 Python
通过Python模块filecmp 对文件比较的实现方法
2018/06/29 Python
Python闭包函数定义与用法分析
2018/07/20 Python
anaconda如何查看并管理python环境
2019/07/05 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
2020/03/09 Python
python输出结果刷新及进度条的实现操作
2020/07/13 Python
使用before和:after伪类制作css3圆形按钮
2014/04/08 HTML / CSS
几个CSS3的flex弹性盒模型布局的简单例子演示
2016/05/12 HTML / CSS
大学校庆邀请函
2014/01/11 职场文书
大学生村官典型材料
2014/01/12 职场文书
家庭教育先进个人事迹材料
2014/01/24 职场文书
文明青少年标兵事迹材料
2014/01/28 职场文书
关于是否需要写商业计划书
2014/02/07 职场文书
元旦晚会主持词
2014/03/24 职场文书
员工安全生产责任书
2014/07/22 职场文书
合伙购房协议样本
2014/10/06 职场文书
陪护人员误工证明
2015/06/24 职场文书
golang中的并发和并行
2021/05/08 Golang
mysql升级到5.7时,wordpress导数据报错1067的问题
2021/05/27 MySQL
剖析后OpLog订阅MongoDB的数据变更就没那么难了
2022/02/24 MongoDB
golang操作redis的客户端包有多个比如redigo、go-redis
2022/04/14 Golang