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 cron中的批处理
Sep 16 PHP
让PHP以ROOT权限执行系统命令的方法
Feb 10 PHP
php中inlcude()性能对比详解
Sep 16 PHP
PHP中的output_buffering详细介绍
Sep 27 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
Nov 04 PHP
php上传文件并存储到mysql数据库的方法
Mar 16 PHP
php实现无限级分类(递归方法)
Aug 06 PHP
PHP定时执行任务的3种方法详解
Dec 21 PHP
如何通过View::first使用Laravel Blade的动态模板详解
Sep 21 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
phpstorm 配置xdebug的示例代码
Mar 31 PHP
php面向对象程序设计入门教程
Jun 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
ajax取消挂起请求的处理方法
2013/03/18 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
2014/07/08 PHP
PHP6连接SQLServer2005的三部曲
2016/04/15 PHP
RR vs IO BO3 第一场2.13
2021/03/10 DOTA
收藏Javascript中常用的55个经典技巧
2007/08/12 Javascript
jQuery formValidator表单验证插件开源了 含API帮助、源码、示例
2008/08/14 Javascript
常用jQuery代码分享
2015/07/14 Javascript
JavaScript实现跨浏览器的添加及删除事件绑定函数实例
2015/08/04 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
详解Webwork中Action 调用的方法
2016/02/02 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
2016/11/09 Javascript
jQuery中checkbox反复调用attr('checked', true/false)只有第一次生效的解决方法
2016/11/16 Javascript
js获取浏览器的各种属性
2017/04/27 Javascript
浅谈vue+webpack项目调试方法步骤
2017/09/11 Javascript
angularJs中ng-model-options设置数据同步的方法
2018/09/30 Javascript
vue项目中axios请求网络接口封装的示例代码
2018/12/18 Javascript
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
JavaScript Reflect Metadata实现详解
2019/12/12 Javascript
微信小程序入门之指南针
2020/10/22 Javascript
Vue使用Element实现增删改查+打包的步骤
2020/11/25 Vue.js
python发布模块的步骤分享
2014/02/21 Python
python网络编程之数据传输UDP实例分析
2015/05/20 Python
解密Python中的描述符(descriptor)
2015/06/03 Python
详解Python中的from..import绝对导入语句
2016/06/21 Python
python 3.6.5 安装配置方法图文教程
2018/09/18 Python
对python3新增的byte类型详解
2018/12/04 Python
Pycharm以root权限运行脚本的方法
2019/01/19 Python
matplotlib制作雷达图报错ValueError的实现
2021/01/05 Python
澳大利亚相机之家:Camera House
2017/11/30 全球购物
职称自我鉴定
2013/10/15 职场文书
前台文员个人求职信范文
2014/01/05 职场文书
十八届三中全会学习方案
2014/02/16 职场文书
酒店秘书求职信范文
2014/02/17 职场文书
护理专业学生职业生涯规划范文
2014/03/11 职场文书
2014年教师节国旗下讲话稿
2014/09/10 职场文书
通过T-SQL语句创建游标与实现数据库加解密功能
2022/03/16 SQL Server