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 相关文章推荐
一个图形显示IP的PHP程序代码
Oct 19 PHP
PHP定时自动生成静态HTML的实现代码
Jun 20 PHP
基于php上传图片重命名的6种解决方法的详细介绍
Apr 28 PHP
PHP中$_SERVER的详细参数与说明介绍
Oct 26 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
Dec 18 PHP
php清除和销毁session的方法分析
Mar 19 PHP
PHP连接数据库实现注册页面的增删改查操作
Mar 27 PHP
php array_key_exists() 与 isset() 的区别
Oct 24 PHP
thinkphp自定义权限管理之名称判断方法
Apr 01 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
Sep 01 PHP
PHP中实现中文字串截取无乱码的解决方法
May 29 PHP
Laravel 错误提示本地化的实现
Oct 22 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通过curl模拟登陆DZ论坛
2015/05/11 PHP
PHP中把对象数组转换成普通数组的方法
2015/07/10 PHP
PHP实现的激活用户注册验证邮箱功能示例
2017/06/06 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
jquery select操作的日期联动实现代码
2009/12/06 Javascript
使用JQuery和CSS模拟超链接的用户单击事件的实现代码
2012/05/23 Javascript
js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS
2013/11/18 Javascript
javascript获取当前鼠标坐标的方法
2015/01/10 Javascript
jquery ztree实现模糊搜索功能
2016/02/25 Javascript
JavaScript必知必会(五) eval 的使用
2016/06/08 Javascript
jQuery插件扩展测试实例
2016/06/21 Javascript
json与jsonp知识小结(推荐)
2016/08/16 Javascript
利用jQuery的动画函数animate实现豌豆发射效果
2016/08/28 Javascript
CSS3 3D 技术手把手教你玩转
2016/09/02 Javascript
利用js+css+html实现固定table的列头不动
2016/12/08 Javascript
vue.js实现含搜索的多种复选框(附源码)
2017/03/23 Javascript
Vue.js递归组件构建树形菜单
2017/12/24 Javascript
详解node字体压缩插件font-spider的用法
2018/09/28 Javascript
Vue实现简易计算器
2020/02/25 Javascript
vue项目实现多语言切换的思路
2020/09/17 Javascript
Python中解析JSON并同时进行自定义编码处理实例
2015/02/08 Python
详细介绍Python中的偏函数
2015/04/27 Python
Python中eval带来的潜在风险代码分析
2017/12/11 Python
pandas系列之DataFrame 行列数据筛选实例
2018/04/12 Python
PYQT5 vscode联合操作qtdesigner的方法
2020/03/24 Python
Sandro法国官网:法国成衣品牌
2019/08/28 全球购物
八年级音乐教学反思
2014/01/09 职场文书
2014年医院十一国庆节活动方案
2014/09/15 职场文书
机关党员四风问题个人整改措施
2014/10/26 职场文书
办公用房租赁协议书
2014/11/29 职场文书
时尚女魔头观后感
2015/06/04 职场文书
学习党史心得体会2016
2016/01/23 职场文书
详解前端任务构建利器Gulp.js使用指南
2021/04/30 Javascript
pytorch 运行一段时间后出现GPU OOM的问题
2021/06/02 Python
基于Python实现nc批量转tif格式
2022/08/14 Python