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 相关文章推荐
用cookies来跟踪识别用户
Oct 09 PHP
PHP新手上路(三)
Oct 09 PHP
PHP 模板高级篇总结
Dec 21 PHP
ADODB的数据库封包程序库
Dec 31 PHP
php cookie 作用范围?不要在当前页面使用你的cookie
Mar 24 PHP
解析coreseek for sphinx的使用
Jun 21 PHP
php switch语句多个值匹配同一代码块应用示例
Jul 29 PHP
PHP进程通信基础之信号
Feb 19 PHP
PHP新特性之字节码缓存和内置服务器
Aug 11 PHP
PHP实现权限管理功能示例
Sep 22 PHP
PHP观察者模式示例【Laravel框架中有用到】
Jun 15 PHP
基于Laravel 5.2 regex验证的正确写法
Sep 29 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之第二天
2006/10/09 PHP
使用PHP遍历文件夹与子目录的函数代码
2011/09/26 PHP
PHP使用range协议实现输出文件断点续传代码实例
2014/07/04 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
2016/11/14 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
2017/03/15 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
2020/08/06 PHP
javascript 获取HTML DOM父、子、临近节点
2014/06/16 Javascript
javascript实现window.print()去除页眉页脚
2014/12/30 Javascript
jQuery实现鼠标划过展示大图的方法
2015/03/09 Javascript
TinyMCE汉化及本地上传图片功能实例详解
2016/05/31 Javascript
Bootstrap Table服务器分页与在线编辑应用总结
2016/08/08 Javascript
javascript笔记之匿名函数和闭包
2017/02/06 Javascript
JS排序之选择排序详解
2017/04/08 Javascript
用angular实现多选按钮的全选与反选实例代码
2017/05/23 Javascript
javascript实现最长公共子序列实例代码
2018/02/05 Javascript
深入浅析angular和vue还有jquery的区别
2018/08/13 jQuery
小程序云开发初探(小结)
2018/10/24 Javascript
基于vue2的canvas时钟倒计时组件步骤解析
2018/11/05 Javascript
《javascript设计模式》学习笔记四:Javascript面向对象程序设计链式调用实例分析
2020/04/07 Javascript
浅谈使用nodejs搭建web服务器的过程
2020/07/20 NodeJs
[11:01]2014DOTA2西雅图邀请赛 冷冷带你探秘威斯汀
2014/07/08 DOTA
[02:42]2014DOTA2国际邀请赛 三冰专访:我会打到Ti20
2014/07/13 DOTA
[03:00]2014DOTA2国际邀请赛 Titan淘汰潸然泪下Ohaiyo专访
2014/07/15 DOTA
Python 从一个文件中调用另一个文件的类方法
2019/01/10 Python
对Python3 pyc 文件的使用详解
2019/02/16 Python
Python实现密钥密码(加解密)实例详解
2020/04/26 Python
零基础学python应该从哪里入手
2020/08/11 Python
HTML5的video标签的浏览器兼容性增强方案分享
2016/05/19 HTML / CSS
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
Sunglass Hut巴西网上商店:男女太阳镜
2020/10/04 全球购物
超市端午节活动方案
2014/01/23 职场文书
企业理念标语
2014/06/09 职场文书
家庭经济困难证明
2015/06/23 职场文书
2016年全国爱牙日宣传活动总结
2016/04/05 职场文书
导游词之天津古文化街
2019/11/09 职场文书
MySQL数据库中varchar类型的数字比较大小的方法
2021/11/17 MySQL