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 远程关机实现代码
Nov 10 PHP
Windows7下PHP开发环境安装配置图文方法
May 20 PHP
PHP动态分页函数,PHP开发分页必备啦
Nov 07 PHP
PHP中替换换行符的几种方法小结
Oct 15 PHP
判断php数组是否为索引数组的实现方法
Jun 13 PHP
解析posix与perl标准的正则表达式区别
Jun 17 PHP
PHP获取用户客户端真实IP的解决方案
Oct 10 PHP
thinkPHP多语言切换设置方法详解
Nov 11 PHP
PHP错误和异常处理功能模块示例
Nov 12 PHP
浅谈php fopen下载远程文件的函数
Nov 18 PHP
基于win2003虚拟机中apache服务器的访问
Aug 01 PHP
PHP清除缓存的几种方法总结
Sep 12 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版自动生成文章摘要
2008/07/23 PHP
php下利用curl判断远程文件是否存在的实现代码
2011/10/08 PHP
php 错误处理经验分享
2011/10/11 PHP
PHP+memcache实现消息队列案例分享
2014/05/21 PHP
php使用NumberFormatter格式化货币的方法
2015/03/21 PHP
PHP的PDO操作简单示例
2016/03/30 PHP
PHP生成各种随机验证码的方法总结【附demo源码】
2017/06/05 PHP
js操作输入框中选择内容兼容IE及其他主流浏览器
2014/04/22 Javascript
纯CSS3代码实现滑动开关效果
2015/08/19 Javascript
JS组件Bootstrap Table布局详解
2016/05/27 Javascript
jQuery图片渐变特效的简单实现
2016/06/25 Javascript
完美JQuery图片切换效果的简单实现
2016/07/21 Javascript
简单理解vue中Props属性
2016/10/27 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
2016/11/11 Javascript
vue使用element-ui的el-input监听不了回车事件的解决方法
2018/01/12 Javascript
使用use注册Vue全局组件和全局指令的方法
2018/03/08 Javascript
[51:22]Fnatic vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
详细探究Python中的字典容器
2015/04/14 Python
python中MethodType方法介绍与使用示例
2017/08/03 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】
2018/12/05 Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
2019/06/27 Python
Jacobi迭代算法的Python实现详解
2019/06/29 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
python使用梯度下降算法实现一个多线性回归
2020/03/24 Python
详解pandas.DataFrame.plot() 画图函数
2020/06/14 Python
基于Python爬取京东双十一商品价格曲线
2020/10/23 Python
可以在一个PHP文件里面include另外一个PHP文件两次吗
2015/05/22 面试题
新员工欢迎词
2014/01/12 职场文书
加拿大留学自荐信
2014/01/28 职场文书
倡议书格式范文
2014/04/14 职场文书
2015年护士节慰问信
2015/03/23 职场文书
小学安全教育主题班会
2015/08/12 职场文书
2016幼儿教师自荐信范文
2016/01/28 职场文书
浅谈Golang 嵌套 interface 的赋值问题
2021/04/29 Golang
在Python 中将类对象序列化为JSON
2022/04/06 Python