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 smarty函数扩展
Mar 15 PHP
CodeIgniter上传图片成功的全部过程分享
Aug 12 PHP
PHP实现抓取Google IP并自动修改hosts文件
Feb 12 PHP
Swoole-1.7.22 版本已发布,修复PHP7相关问题
Dec 31 PHP
php输出图像的方法实例分析
Feb 16 PHP
php中的异常和错误浅析
May 03 PHP
PHP截取发动短信内容的方法
Jul 04 PHP
简单实现php上传文件功能
Sep 21 PHP
PHP合并两个或多个数组的方法
Jan 20 PHP
PHP中“=&gt;
Mar 01 PHP
PHP 模拟登陆功能实例详解
Sep 10 PHP
PHP策略模式写法
Apr 01 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模板的朋友必看的很多个顶级PHP模板引擎比较分析
2008/05/26 PHP
PHP把JPEG图片转换成Progressive JPEG的方法
2014/06/30 PHP
javascript 写类方式之三
2009/07/05 Javascript
onkeypress字符按键兼容所有浏览器使用介绍
2013/04/24 Javascript
JS、CSS以及img对DOMContentLoaded事件的影响
2014/08/12 Javascript
JS动态修改iframe内嵌网页地址的方法
2015/04/01 Javascript
jQuery实现类似淘宝网图片放大效果的方法
2015/07/08 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
使用jQuery Mobile框架开发移动端Web App的入门教程
2016/05/17 Javascript
浅析JavaScript函数的调用模式
2016/08/10 Javascript
微信小程序 开发之全局配置
2017/05/05 Javascript
深入理解Webpack 中路径的配置
2017/06/17 Javascript
使用node打造自己的命令行工具方法教程
2018/03/26 Javascript
jQuery实现的淡入淡出图片轮播效果示例
2018/08/29 jQuery
深入理解javascript prototype的相关知识
2019/09/19 Javascript
vue项目从node8.x升级到12.x后的问题解决
2019/10/25 Javascript
解决vue-router 二级导航默认选中某一选项的问题
2019/11/01 Javascript
如何在 Vue 中使用 JSX
2021/02/14 Vue.js
Python3遍历目录树实现方法
2015/05/22 Python
Python实现将xml导入至excel
2015/11/20 Python
python 中split 和 strip的实例详解
2017/07/12 Python
python 定时修改数据库的示例代码
2018/04/08 Python
Pandas中把dataframe转成array的方法
2018/04/13 Python
python3.6使用urllib完成下载的实例
2018/12/19 Python
python实现字符串完美拆分split()的方法
2019/07/16 Python
Python和Sublime整合过程图示
2019/12/25 Python
Python基于BeautifulSoup爬取京东商品信息
2020/06/01 Python
class类在python中获取金融数据的实例方法
2020/12/10 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
2021/01/15 Python
荷兰最大的多品牌男装连锁店:Adam Brandstore
2019/12/31 全球购物
超市业务员岗位职责
2013/12/05 职场文书
领导班子党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书
2014党员整改措施思想汇报
2014/10/07 职场文书
国庆放假通知怎么写
2015/07/30 职场文书
如何将JavaScript将数组转为树形结构
2021/06/02 Javascript
Python中itertools库的四个函数介绍
2022/04/06 Python