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 和 XML: 使用expat函数(一)
Oct 09 PHP
在PHP中使用Sockets 从Usenet中获取文件
Jan 10 PHP
PHP 图像尺寸调整代码
May 26 PHP
php学习笔记 类的声明与对象实例化
Jun 13 PHP
php UBB 解析实现代码
Nov 27 PHP
php查看请求头信息获取远程图片大小的方法分享
Dec 25 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
Feb 08 PHP
详解WordPress开发中的get_post与get_posts函数使用
Jan 04 PHP
深入浅析php中sprintf与printf函数的用法及区别
Jan 08 PHP
php实现word转html的方法
Jan 22 PHP
php高清晰度无损图片压缩功能的实现代码
Dec 09 PHP
解决Laravel 使用insert插入数据,字段created_at为0000的问题
Oct 11 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
印尼林东PWN黄金曼特宁咖啡豆:怎么冲世界上最醇厚的咖啡冲煮教程
2021/03/03 冲泡冲煮
php时区转换转换函数
2014/01/07 PHP
PHP利用APC模块实现大文件上传进度条的方法
2015/10/29 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
2016/04/28 PHP
JavaScript游戏之是男人就下100层代码打包
2010/11/08 Javascript
获取当前点击按钮的id用this.id实现
2014/03/17 Javascript
js实现的Easy Tabs选项卡用法实例
2015/09/06 Javascript
jQuery-1.9.1源码分析系列(十一)DOM操作续之克隆节点
2015/12/01 Javascript
js获取url传值的方法
2015/12/18 Javascript
浅谈js中test()函数在正则中的使用
2016/08/19 Javascript
简单理解Vue条件渲染
2016/12/03 Javascript
js倒计时小实例(多次定时)
2016/12/08 Javascript
使用BootStrap实现标签切换原理解析
2017/03/14 Javascript
JS+html5制作简单音乐播放器
2020/09/13 Javascript
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
2017/11/28 Javascript
vue iview实现动态路由和权限验证功能
2018/04/17 Javascript
JavaScript工具库MyTools详解
2020/01/01 Javascript
python使用urllib模块和pyquery实现阿里巴巴排名查询
2014/01/16 Python
Linux下使用python调用top命令获得CPU利用率
2015/03/10 Python
Python制作CSDN免积分下载器
2015/03/10 Python
Python字符串拼接、截取及替换方法总结分析
2016/04/13 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
2017/11/16 Python
Python爬取商家联系电话以及各种数据的方法
2018/11/10 Python
浅谈python3发送post请求参数为空的情况
2018/12/28 Python
Python json转字典字符方法实例解析
2020/04/13 Python
Python OrderedDict字典排序方法详解
2020/05/21 Python
详解CSS3中nth-child与nth-of-type的区别
2017/01/05 HTML / CSS
CSS3效果:自定义“W”形运行轨迹实例
2017/03/29 HTML / CSS
墨尔本最受欢迎的复古风格品牌:Princess Highway
2018/12/21 全球购物
final, finally, finalize的区别
2012/03/01 面试题
设计部经理的岗位职责
2013/11/16 职场文书
给领导的致歉信范文
2014/01/13 职场文书
党员“四风”问题批评与自我批评思想汇报
2014/10/06 职场文书
小学大队委竞选口号
2015/12/25 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书
Python基础之tkinter图形化界面学习
2021/04/29 Python