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 相关文章推荐
php4的session功能评述(二)
Oct 09 PHP
调整优化您的LAMP应用程序的5种简单方法
Jun 26 PHP
php打造属于自己的MVC框架
Mar 07 PHP
PHP Class&amp;Object -- PHP 自排序二叉树的深入解析
Jun 25 PHP
多个PHP中文字符串截取函数
Nov 12 PHP
将FCKeditor导入PHP+SMARTY的实现方法
Jan 15 PHP
php获取本周星期一具体日期的方法
Apr 20 PHP
THINKPHP在添加数据的时候获取主键id的值方法
Apr 03 PHP
浅谈PHP中的面向对象OOP中的魔术方法
Jun 12 PHP
PHP设计模式之模板方法模式定义与用法详解
Apr 02 PHP
PHP堆栈调试操作简单示例
Jun 15 PHP
php并发加锁问题分析与设计代码实例讲解
Feb 26 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字符串比较函数strcmp()和strcasecmp()使用总结
2014/11/19 PHP
Jquery优化效率 提升性能解决方案
2010/09/06 Javascript
jQuery UI Dialog控件中的表单无法正常提交的解决方法
2010/12/19 Javascript
基于jquery的多功能软键盘插件
2012/07/25 Javascript
引用外部js乱码问题分析及解决方案
2013/04/12 Javascript
浅谈Javascript 数组与字典
2015/01/29 Javascript
jQuery实现左右切换焦点图
2015/04/03 Javascript
javascript禁止访客复制网页内容的实现代码
2015/08/05 Javascript
js实现完美兼容各大浏览器的人民币大小写相互转换
2015/10/29 Javascript
JavaScript严格模式详解
2015/11/18 Javascript
jQuery获取元素父节点的方法
2016/06/21 Javascript
jQuery实现智能判断固定导航条或侧边栏的方法
2016/09/04 Javascript
javascript实现消灭星星小游戏简单版
2016/11/15 Javascript
jQuery动态添加li标签并添加属性和绑定事件方法
2018/02/24 jQuery
vuedraggable+element ui实现页面控件拖拽排序效果
2020/07/29 Javascript
vue实现动态按钮功能
2019/05/13 Javascript
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
13 个npm 快速开发技巧(推荐)
2019/07/04 Javascript
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
2019/07/13 Javascript
Vue的双向数据绑定实现原理解析
2020/02/17 Javascript
在vue中使用防抖函数组件操作
2020/07/26 Javascript
[34:08]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS EG
2018/03/30 DOTA
python如何对实例属性进行类型检查
2018/03/20 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
Python根据当前日期取去年同星期日期
2019/04/14 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
2019/08/05 Python
python如何实现不用装饰器实现登陆器小程序
2019/12/14 Python
Django表单提交后实现获取相同name的不同value值
2020/05/14 Python
python 求两个向量的顺时针夹角操作
2021/03/04 Python
西班牙在线宠物商店:zooplus.es
2017/02/24 全球购物
日本航空官方网站:JAL
2019/06/19 全球购物
社区中秋节活动方案
2014/01/29 职场文书
小摄影师教学反思
2014/04/27 职场文书
司法局群众路线教育实践活动整改措施思想汇报
2014/10/13 职场文书
5.12护士节活动总结
2015/02/10 职场文书
Java 死锁解决方案
2022/05/11 Java/Android